java问题诊断方法及工具

线上系统出现问题时,需要记载系统当前运行状况,总结一下,大概需要关注以下几个方面:
1.负载:—— top命令
在linux上,执行top 等命令,关注load, Memory, CPU 等系统概况,以及关注CPU和memory 占用较多的进程。
使用top -H, 并按 shift+p 对CPU进行排序,找到当前占用CPU最多的线程。(top -u bpm -H),-H 按线程显示,否则按进程显示
使用 ps -T <pid> |wc -l 找到当前运行的java 进程的线程数。

2.Thread dump—— jstack
kill -3 <pid>
jstack <pid> 截获当前java 进程的线程堆栈。

(java thread dump相关文章)


3. Memory—— jmap
jmap -heap <pid> 可以得到当前堆内存情况。
如果怀疑有内存问题,还可以dump 堆对象。
Java5:jmap -heap:format=b <pid>
Java6: jmap -dump:format=b,file=heap.bin <pid>
注意:这个操作对机器有很大的性能影响。在java 6中,这个也可以通过java 启动参数中加入-XX:HeapDumpPath=/home/nasdaq/oom.hrof -XX:+HeapDumpOnOutOfMemoryError 实现OOM时自动memory dump

4.GC—— jstat
jstat -gcutil <pid> 得到当前应用的gc 情况。


5.网络连接情况
得到与网络各机器的连接数
netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r
以上命令执行结果是:
连接数量 连接ip
也可以通过netstat 具体关注某个端口的连接数。

6.日志

备份当前应用日志。


7.工具:

Heap Dump分析工具:Memory Analyzer (MAT):http://www.eclipse.org/mat/

Thread Dump分析工具:Lockness:http://lockness.plugin.free.fr/home.php



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值