当服务器内存飙升或者cpu负载飙升的时候,可以使用如下步骤排查问题:
1、终端输入top命令,键盘大写的情况下按P(cpu负载率从高到低排序)或者M(内存使用率从高到低排序),可以查看导致cpu或者内存飙升的java pid。
2、jstack PID号 > jstack.log
上面的命令可以保存当前时刻的线程栈到 jstack.log 文件中(保存在当前路径下)
3、分析栈文件
3.1 grep 'java.lang.Thread.State' jstack.log | wc -l
上述命令可以统计java.lang.Thread.State出现的次数
3.2 grep -A 1 'java.lang.Thread.State' jstack.log | grep -v 'java.lang.Thread.State' | sort | uniq -c |sort -n
该命令可以将线程栈文件的状态按次数排序显示
4、jmap -dump:format=b,file=heap.log pid
上述命令可以保存当前的堆情况到heap.log文件中。
5、将heap.log传输到windows系统下,复制一份,后缀改成.hprof
下载Eclipse的内存分析工具,地址:https://www.eclipse.org/mat/downloads.php