Linux中查找最耗性能的JAVA代码

摘要:
这里总结了在Linux和Java环境中查找消耗最多CPU性能的代码段的方法。jstackResult中的内容。txt大致如下:III找出消耗CPU最多的子进程。执行:top p12789–H输出:PIDUSERPRNIVIRRTRESSHRS%CPU%MEMTIME+COMMAND11637root200320m689m10mS13.78.8573:57.24java9867root200320m6.8m10mR2.78.8216:57.688java29006root200320m681mS2.78.83:49.73java28761root200320m683mS2.38.83:55.86java29008root200320m89mS2.38.83:50.22java29448root200320m689mR2.38.83:37.94java30211root2003320m689m10mR2.38.83:17.72java30213root2003320m689m10mR2.38.83:18.59java1087root2003320m689m10mS2.38.82:0.0java13117root2003320m89m10ms2.08.8574:07.45java13314root2003320m289m10mm2.08.8574:12.15java13751root2003320m189m10mM2.08.8564:11.94java14103root2003320m389m10mr2.08.8560:00.50java14485root2003320m489m10mR0.08.8559:24.82java16319root2003320m1289m10mR2.08.8551:27.09java17406root2003320m3 m10mR2.08.8549:19.02java179.8549 57室T2003320m689m10mR2.08.8547:4.06Java在12789下找到了消耗最多性能的子进程。转储中的nid是十六进制。执行:printf%0x11673输出:2d99可以通过从转储中搜索堆栈信息来查找问题。

    在这里总结一下查找Linux、Java环境下最耗CPU性能的代码段的方法。基本上原理就是使用top命令查看最耗cpu的进程和线程(子进程)。使用jstack把java线程堆栈给dump下来。然后,在堆栈信息中查找出对应的代码块。具体操作如下:

一、查找最耗cpu的进程
执行:top
输出:    
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                     
12789 root      20   0 3320m 689m  10m S 120.5  8.8  15430:42 java                                                                                                                                        
31444 root      20   0 2694m  21m 6992 S 11.1  0.3  44:28.65 java                                                                                                                                         
 5031 root      20   0 2694m  21m 6992 S  6.9  0.3 264:18.50 java                                                                                                                                         
 2896 root      20   0 2004m 389m  15m S  1.4  4.9   0:47.65 java                                                                                                                                         
 3729 root      20   0 14936 1144  796 R  1.4  0.0   0:00.01 top                                                                                                                                          
    1 root      20   0 19248 1444 1156 S  0.0  0.0   0:02.50 init                                                                                                                                         
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                                                                                                     
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.02 migration/0                                                                                                                                  
    4 root      20   0     0    0    0 S  0.0  0.0   0:01.16 ksoftirqd/0                                                                                                                                  
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0

这里我们看到最耗cpu的Java进程是:12789 

二、jstack堆栈信息保存

    进入Java的安装目录(如:/usr/java/jdk1.6.0_34/bin),在bin文件夹中执行:./jstack 12789  >  jstackResult.txt 这样,就将堆栈信息保存到jstackResult.txt这个文件中了。jstackResult.txt中的内容大体如下:

Linux中查找最耗性能的JAVA代码第1张

三、查出最耗cpu的子进程(java线程)

执行:top -p 12789 –H
输出:
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                     
11637 root      20   0 3320m 689m  10m S  13.7  8.8 573:57.24 java                                                                                                                                         
 9867 root      20   0 3320m 689m  10m R  2.7  8.8 216:57.68 java                                                                                                                                         
29006 root      20   0 3320m 689m  10m S  2.7  8.8   3:49.73 java                                                                                                                                         
28761 root      20   0 3320m 689m  10m S  2.3  8.8   3:55.86 java                                                                                                                                         
29008 root      20   0 3320m 689m  10m S  2.3  8.8   3:50.22 java                                                                                                                                         
29448 root      20   0 3320m 689m  10m R  2.3  8.8   3:37.94 java                                                                                                                                         
30211 root      20   0 3320m 689m  10m R  2.3  8.8   3:17.72 java                                                                                                                                         
30213 root      20   0 3320m 689m  10m R  2.3  8.8   3:18.59 java                                                                                                                                         
 1087 root      20   0 3320m 689m  10m S  2.3  8.8   2:00.05 java                                                                                                                                         
13117 root      20   0 3320m 689m  10m S  2.0  8.8 574:07.45 java                                                                                                                                         
13314 root      20   0 3320m 689m  10m S  2.0  8.8 574:12.15 java                                                                                                                                         
13751 root      20   0 3320m 689m  10m S  2.0  8.8 564:11.94 java                                                                                                                                         
14103 root      20   0 3320m 689m  10m R  2.0  8.8 560:00.50 java                                                                                                                                         
14485 root      20   0 3320m 689m  10m R  2.0  8.8 559:24.82 java                                                                                                                                         
16319 root      20   0 3320m 689m  10m R  2.0  8.8 551:27.09 java                                                                                                                                         
17406 root      20   0 3320m 689m  10m R  2.0  8.8 549:19.02 java                                                                                                                                         
17957 root      20   0 3320m 689m  10m R  2.0  8.8 547:40.06 java   

找到12789下最耗性能的子进程。top命令使用-p参数来指定进程号,-H参数来显示线程。这里可以看到最耗cpu的进程(java中的线程)是11637。

四、从堆栈信息中查找最耗费性能的代码块

    从上面看到,我们用top找出来的pid是十进制的。而dump下来的nid是十六进制的。其实他们是一个东西,只是进制不同。利用printf命令格式化来转换一下进制。

执行:printf %0x 11673
输出:2d99

通过在dump出的堆栈信息中查找,就能找到问题所在了。

Linux中查找最耗性能的JAVA代码第2张

免责声明:文章转载自《Linux中查找最耗性能的JAVA代码》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL InnoDB 修改表列Online DDLuniapp-小程序开发中遇到的问题:下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux 下将tomcat注册成服务并开机启动

一、将startup.sh和shutdown.sh新建软连接到/usr/bin ln -s /usr/local/apache-tomcat-8.5.38/bin/startup.sh /usr/bin/startup.sh ln -s /usr/local/apache-tomcat-8.5.38/bin/shutdown.sh /usr/bin/shu...

【Azure 应用服务】Azure Function App Linux环境下的Python Function,安装 psycopg2 模块错误

问题描述 在Azure中创建Function App(函数应用), 用以运行Python代码(Python Version 3.7)。 通过VS Code创建一个HttpTrigger的Function,其中使用到了psycopg2 模块,以便连接Azure Database for PostgreSQL 数据库 当通过VS Code发布到Azure后,...

gpio IOCTL控制

之前工作的时候,linux下用过GPIO的,无非就是配置输出输入模式,set/get value ,或者是gpio中断之类的,用户态配置GPIO主要是两种方式:用户态使用mmap直接将GPIO 地址映射过来,操作地址, 或者 IOCTL发命令给内核,内核来控制,最近半年都在写单片机的代码。时间久了有点忘了,最近使用都是偷懒直接使用了/sys下的设备,通过s...

kvm安装

需要准备的有 1.环境:Centos7 2.准备虚拟机硬盘 3.需要系统iso镜像 (这里用到的是CentOS-7-x86_64-Minimal-1810.iso) 4vnc 5xming 一. 准备环境 1.关闭防火墙和selinux [root@ localhost ~]# systemctl stop firewalld [root@ localh...

Centos7基本命令

shell基本命令 linux命令行的组成结构 linux系统命令操作语法格式 命令 空格 参数 空格 文件路径或者需要处理的内容 rm -rf /tmp/* ls -la /home 1.一般情况下,【参数】是可选的,一些情况下【文件路径】也是可选的 2.参数》同一个命令,跟上不同的参数执行不同的功能...

linux环境上 rocketmq 安装部署

Rocketmq-简单部署 一、准备环境 1.系统:Centos7.3(无硬性要求) 2. jdk:1.8 3.maven:3.5(无硬性要求) 4.git 5.rocketmq 4.2 二、环境部署 1.jdk1.8以及maven可以在另一篇文章查看【http://www.cnblogs.com/dingkailinux/p/8794611.html】...