Linux中查找最耗性能的JAVA代码
在这里总结一下查找Linux、Java环境下最耗CPU性能的代码段的方法。基本上原理就是使用top命令查看最耗cpu的进程和线程(子进程)。使用jstack把java线程堆栈给dump下来。然后,在堆栈信息中查找出对应的代码块。具体操作如下:
一、查找最耗cpu的进程
执行:top
输出:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
root 3320m 689m 10m S 120.5 8.8 : java
root 2694m 21m S 11.1 0.3 :28.65 java
root 2694m 21m S 6.9 0.3 :18.50 java
root 2004m 389m 15m S 1.4 4.9 :47.65 java
root R 1.4 0.0 :00.01 top
root S 0.0 0.0 :02.50 init
root S 0.0 0.0 :00.00 kthreadd
root RT S 0.0 0.0 :00.02 migration/
root S 0.0 0.0 :01.16 ksoftirqd/
root RT S 0.0 0.0 :00.00 watchdog/
这里我们看到最耗cpu的Java进程是:12789
二、jstack堆栈信息保存
进入Java的安装目录(如:/usr/java/jdk1.6.0_34/bin),在bin文件夹中执行:./jstack 12789 > jstackResult.txt 这样,就将堆栈信息保存到jstackResult.txt这个文件中了。jstackResult.txt中的内容大体如下:

三、查出最耗cpu的子进程(java线程)
执行:top -p –H
输出:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
root 3320m 689m 10m S 13.7 8.8 :57.24 java
root 3320m 689m 10m R 2.7 8.8 :57.68 java
root 3320m 689m 10m S 2.7 8.8 :49.73 java
root 3320m 689m 10m S 2.3 8.8 :55.86 java
root 3320m 689m 10m S 2.3 8.8 :50.22 java
root 3320m 689m 10m R 2.3 8.8 :37.94 java
root 3320m 689m 10m R 2.3 8.8 :17.72 java
root 3320m 689m 10m R 2.3 8.8 :18.59 java
root 3320m 689m 10m S 2.3 8.8 :00.05 java
root 3320m 689m 10m S 2.0 8.8 :07.45 java
root 3320m 689m 10m S 2.0 8.8 :12.15 java
root 3320m 689m 10m S 2.0 8.8 :11.94 java
root 3320m 689m 10m R 2.0 8.8 :00.50 java
root 3320m 689m 10m R 2.0 8.8 :24.82 java
root 3320m 689m 10m R 2.0 8.8 :27.09 java
root 3320m 689m 10m R 2.0 8.8 :19.02 java
root 3320m 689m 10m R 2.0 8.8 :40.06 java
找到12789下最耗性能的子进程。top命令使用-p参数来指定进程号,-H参数来显示线程。这里可以看到最耗cpu的进程(java中的线程)是11637。
四、从堆栈信息中查找最耗费性能的代码块
从上面看到,我们用top找出来的pid是十进制的。而dump下来的nid是十六进制的。其实他们是一个东西,只是进制不同。利用printf命令格式化来转换一下进制。
执行:printf %0x
输出:2d99
通过在dump出的堆栈信息中查找,就能找到问题所在了。

Linux中查找最耗性能的JAVA代码的更多相关文章
- Linux中查找最耗CPU的Java代码问题
第一步: 查看消耗CPU最高的进程PID [lolaage@web2 tomcat-ns]$ top top - 13:23:32 up 42 days, 19:11, 3 users, load ...
- Linux中常用的监控性能的命令(sar、mpstat,vmstat, iostat,)详解
Linux中常用的监控性能的命令有: sar:能查看CPU的平均信息,还能查看指定CPU的信息.与mpstat相比,sar能查看CPU历史信息 mpstat:能查看所有CPU的平均信息,还能查看指定C ...
- linux中查找命令find、locate、whereis、which、type区别
linux中查找命令find.locate.whereis.which.type区别 1. find Java代码 find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件.与查询数据库(/ ...
- linux中查找文件属于那个软件包的方法
一.linux中查找文件属于那个软件包的方法 [root@salt prod]# whereis htpasswdhtpasswd: /usr/bin/htpasswd /usr/share/man/ ...
- sar命令,linux中最为全面的性能分析工具之一
sar是System Activity Reporter(系统活动情况报告)的缩写.这个工具所需要的负载很小,也是目前linux中最为全面的性能分析工具之一.此款工具将对系统当前的状态就行取样,然后通 ...
- systemd-analyze – 在Linux中查找系统启动性能统计信息
您是否在使用 systemd 系统和服务管理器,并且您的 Linux 系统需要较长时间才能启动,或者您希望查看系统启动性能的报告? 如果是的话,你已经登陆了正确的地方. 在本文中,我们将向您展示如何使 ...
- linux中查找(find、locate、which、whereis、grep)命令汇总、帮助命令(man、whatis、apropos、info、help)汇总
(一)find命令详解 find:功能:文件搜索: 语法:find[搜索范围][匹配条件]: 只要匹配条件完全符合才可以被显示,使用通配符*匹配条件*则可以显示匹配条件的所有目录,问号?匹配单个字符 ...
- 如何使用find命令在Linux中查找文件
Linux Find命令是Linux系统管理员工具库中最强大的工具之一. Find是一个命令行实用程序,它允许您根据用户给定的表达式搜索目录层次结构中的文件和目录,并对每个匹配的文件应用用户指定的操作 ...
- 在 Linux 中查找和删除重复文件
原文链接:https://www.linuxprobe.com/linux-FSlint.html FSlint同时具有GUI和CLI模式.因此,对于新手来说,这是一个用户友好的工具.FSlint不仅 ...
随机推荐
- kafka系列教程2(设计构造及原理1)
kafka采用了一些非主流(unconventional)并经过实践的设计使其高效和可扩展.在实际使用中kafka显示出了相对于常见流行的消息系统的优越性.并且每天能够处理上百GB的新的数据. 类 ...
- AbsListView.OnScrollListener
public static interface AbsListView.OnScrollListener android.widget.AbsListView.OnScrollListener 类 ...
- 电量显示Binding Converter MVVM
用一个ProcessBar显示电量,低于20%时候,ForeGround为红色,否则为绿色, 页面使用了MVVM绑定到了ViewModel, ProcessBar XAML为 <Progress ...
- linux 命令进阶
1. ls –i -i, --inode 显示每个文件的inode 号 查看inode 可以用于 同一个classloader加载同名class时,是以先加载到的class为准, ...
- MVC字符串处理及MVC @RenderSection小计
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 最近在做自学MVC,遇到的问题很多,索性一点点总结 ...
- 操作系统:进程管理和IO控制
一.进程管理 进程管理包括进程控制,进程调度,进程同步与通信,死锁控制四个内容. (一)进程控制 进程是操作系统中运行的基本单位,包括程序段,数据段和进程控制段.操作系统通过进程控制块(PCB)管理进 ...
- 实验10.3_数值显示拓展_dword型数转变为表示十进制数的字符串
assume cs:code data segment db 10 dup (0) data ends code segment start : mov ax,4240H;F4240H=1000000 ...
- CentOS 7 下引导 Windows7 启动
Win7/CentOS7 u盘安装后会覆盖硬盘上已有系统的’引导‘ CentOS7下恢复Win7引导 编辑 # vim /etc/grub.d/40_custom 添加 menuentry 'Wind ...
- 。。。无语的Eclipse+Tomact。。。
晕哦,今天又被Eclipse给骗了,今天部署了一个SSH的环境,搞了半天,JAR包是通过BuildPath导入进去的,怎么搞都报错,说是找不到Spring-Web的一个Jar包,差点没有把我给弄死.. ...
- angular 倒计时
$scope.countdown = ; var myTime = setInterval(function() { $scope.countdown--; $scope.$digest(); // ...