java profile【cpu负载过高】

本文探讨了在多CPU环境下,CPU负载陡增而内存占用稳定的状况,通过使用jstack和jmap等工具进行深入分析,有效缩小了排查范围。重点介绍了如何利用jstack检查活动线程状态和识别锁定问题,以及jmap用于内存分析的方法。同时,文章还提到了在IDC环境中用于分析CPU负载高的工具,如eclipse的profile工具和strace命令,提供了定位问题的多种技巧。
摘要由CSDN通过智能技术生成

问题描述: cpu负载陡增,内存占用情况稳定。(在多cpu的情况下,比如4核,free 看到cpuload 15%,但是查看单cpu会达到 100% 负载。。。)

 

1分析工具jstack:

 

/usr/java/jdk1.6.0_13/bin/jstack -l 11831  >   jstack.log  //进程pid

 

以前jstack 弄出来的栈文件总是不知道看些什么。通过这次问题的定位,发现jstack可以很快缩小排查范围。 比较适合定位线程相关的资源消耗。

 

核心看点:

  1 检查活动状态的线程,查看提示行代码。如果不能找到问题,可以相隔几分钟从新dump一次,看该行是否重现。

  2 在同一个dump文件多次出现同一个线程,提示同一行。往往会是“锁”。

 

 

 

2/usr/java/jdk1.6.0_13/bin/jmap -J-d64 -dump:live,format=b,file=heap_dump.bin 15605  //进程pid 文件名

dump到的bin文件使用基于eclipse的工具“MemoryAnalyzer”,可以得到很完整的内存分析报告。

 

个人理解:仅仅是内存方面的分析,好像没办法分析cpu占用的东西。

 

3IDC 上,直接分析 java cpu负载高的工具还不算多,jstack只是说缩小排查范围,可能还需要下面这些技巧():

 

eclipse profile工具:http://eclipsecolorer.sourceforge.net/index_profiler.html

         这个东东非常强大,可惜无法部署到IDC环境,也无法dump数据下来本机分析。对于可以在测试环境下重现的cpu负载高问题,可以尝试配置profile

 

Strace  http://hi.baidu.com/chinaw3/blog/item/4c5b772c39c485ee8a1399c2.html

strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。
  strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。
  下面记录几个常用 option . 
  1 -f -F选项告诉strace同时跟踪forkvfork出来的进程
  2 -o xxx.txt 输出到某个文件。
  3 -e execve 只记录 execve 这类系统调用      

 

这个命令的威力要自己试过了才知道。。嘿嘿

 

Java profile参数:http://java.sun.com/developer/onlineTraining/Programming/JDCBook/perf3.html

cpu=samples|times|old

CPU usage

off

详细情况在“Where the Application Spends its Time”这个小节里面。 这个页面最后也顺带介绍了一下strace

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值