Java线上应用故障排查

时间:2021-11-17 18:10:10

线上故障主要2种: CPU利用率很高, 内存占用率很大

一、CPU利用率很高

1. top查询那个进程CPU使用率高

Java线上应用故障排查

2. 显示进程列表

ps -mp pid -o THREAD,tid,time

Java线上应用故障排查

找到了耗时最高的线程28802,占用CPU时间快两个小时了!

其次将需要的线程ID转换为16进制格式:

printf "%x\n" tid

Java线上应用故障排查

最后打印线程的堆栈信息:

jstack pid |grep tid -A 30

Java线上应用故障排查

从Thread dump日志中可以找到哪行代码造成CPU使用率高

二、内存占用率很大

1. top命令查找那个进程内存占用率大

Java线上应用故障排查

2. 使用jmap命令获取内存dump文件

jmap命令有下面几种常用的用法:

•jmap [pid]

•jmap -histo:live [pid] >a.log

•jmap -dump:live,format=b,file=xxx.xxx [pid]

用得最多是后面两个。其中,jmap -histo:live [pid] 可以查看当前Java进程创建的活跃对象数目和占用内存大小。

jmap -dump:live,format=b,file=xxx.xxx [pid] 则可以将当前Java进程的内存占用情况导出来,方便用专门的内存分析工具(例如:MAT)来分析。

MAT分析内存参考:

http://blog.csdn.net/rachel_luo/article/details/8992461

http://www.blogjava.net/hankchen/archive/2012/03/21/372389.html