目录
1. 目标
针对CPU100%与OOM问题,列举通用性定位方式。
2. 问题CPU100%
首先定位占用CPU资源高的进程和线程,然后通过线程栈定位code。
步骤和基本命令如下:
- top -H -d 10 //top cpu load从高到低显示 且10s刷新一次
- top -Hp pid -d 10 //进程中线程cpu load从高到低显示, 且10s刷新一次
- printf '0x%x' tid //将线程id十进制转为16进制
- sudo -u admin /xxxxx/java/bin/jstack 进程ID | grep 线程ID十六进制 -A num -B num
问题举例
- hashmap死循环问题
3. 问题OOM
查看JVM现场,关注占用内存多的对象,通过GCROOT观察引用路径,定位可能原因。
需要借助内存分析工具,如JProfiler。
问题举例
- ThreadLocal未清除问题。
此时使用jmap查看内存 jstat查看gc,已无法定位问题。