JVM进程cpu飙高分析

 在项目快速迭代中版本发布频繁  近期上线报错一个JVM导致服务器cpu飙高 但内存充足的原因现象.  对于耗内存的JVM程序来而言,  基本可以断定是线程僵死(死锁、死循环等)问题. 

 这里是纪录一下排查linux服务器下JVM线程的基本流程,做一个排查手册:

1、 查看服务器运行情况, 找到一直占用cpu的进程[pid]:  top  或  jps -l 

2、 通过进程[pid] 获得JVM进程的线程运行情况:  top -Hp [pid]

3、获取到长时间运行的线程[pid] 并转换为16进制:  printf '%X '  [pid]

此时得到线程堆栈信息中对应线程的nid(16进制)

4、依据获得16进制的线程[pid] 打印堆栈信息:  jstack -l [pid]  |  grep   [nid] -A 200 

其中 [pid] 为java进程id   [nid]为对应长时间运行的线程id  -A参数表示要显示几行信息 否则只显示一行信息。 

5、分析线程堆栈信息: JVM故障分析系列之四:jstack生成的Thread Dump日志线程状态

参考连接:

如何使用jstack分析线程状态

Java内存泄漏分析系列之一:使用jstack定位线程堆栈信息

Linux top命令的用法详细详解

原文地址:https://www.cnblogs.com/xiaoxing/p/10238552.html