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不仅 ...
随机推荐
- 九个uname命令获取Linux系统详情的实例
当你在控制台模式下,无法通过“鼠标右键 > 关于”获取操作系统的信息.这时,在Linux下,你可以使用uname命令,帮助你完成这些工作. Uname是unix name的缩写.在控制台中实际使 ...
- python_中文乱码问题
1. 编码和解码的概念: 编码是将源对象内容按照一种标准转换为一种标准格式内容. 解码是和编码对应的,它使用和编码相同的标准将编码内容还原为最初的对象内容. 2. python中的编码和解 ...
- Exchanger示例
Exchanger有两个用户,当一(A)方调用exchange方法之后,就开始等待,直到另一(B)方开始调用exchange方法.两个exchange可以认为是原子性的. public class C ...
- c# yyyyMMdd,dd/MM/yyyy 类型字符串转换为datetime 类型
DateTime ConvertDate = DateTime.ParseExact("20140504", "yyyyMMdd", null, System. ...
- Effective C++ 6.继承与面向对象设计
//条款32:确定你的public继承塑模出is-a关系 // 1.public继承意味着is-a的关系,适用在基类上的方法都能用于派生类上. //条款33:避免遮掩继承而来的名称 // 1.在pub ...
- hdu 2846 Repository
http://acm.hdu.edu.cn/showproblem.php?pid=2846 Repository Time Limit: 2000/1000 MS (Java/Others) ...
- php CI框架目录结构及运行机制
CI目录结构 CI主要组成部分为,application(应用文件夹).system(系统文件夹)和index.php入口文件. 应用文件夹中主要是存放控制器.模型和视图等,系统文件夹中主 ...
- 服务器 CentOS上yum安装Nginx服务
一.更改yum源为网易的源加快速度 vi /etc/yum.repos.d/CentOS-Base.repo 更改内容如下 # CentOS-Base.repo # # This file uses ...
- 。。。Hibernate 查询数据 事务管理。。。
在Hibernate中,查询数据的时候,可能会需要事务的管理,为什么呢?因为在查询数据库的时候,Hibernate将数据从数据库里面查询出来之后,会先把数据放入Hibernate的session缓存里 ...
- mysql 行锁
在电子商务里,经常会出现库存数量少,购买的人又特别多,大并发情况下如何确保商品数量不会被多次购买. 其实很简单,利用事务+for update就可以解决. 我们都知道for update实际上是共享锁 ...