CPU或内存占用过高时,发生了什么

前端之家收集整理的这篇文章主要介绍了CPU或内存占用过高时,发生了什么前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在开发过程中,有时候我们发现 JVM 占用的cpu/内存居高不下,跟我们的预期不符,这时,cpu 在做什么呢?是什么线程让cpu/内存如此忙碌呢?我们通过如下几步,可以查看 cpu 在执行什么线程。

1、top 命令查看cpu/内存占用过高的进程(P 按cpu占用大小排序,M 按内存占用大小排序),并记录下进程的 pid

2、top -Hp pid 查看进程的线程信息(P 按cpu占用大小排序,M 按内存占用大小排序),并记录下线程的 tid

3、将 tid 转换为16进制的数字:printf "%x\n" tid

4、使用 jstack 命令,查询线程信息,从而定位到具体线程和代码jstack pid | grep 6f8a -A 30

这样,你就看到为什么 cpu/内存 占用这么高,是什么线程在捣乱了!

5、极端点的做法,把进程全部的线程堆栈导出来,然后再定位 tid 线程在做什么:jstack 18023 > /home/wwwroot/dump18023

6、统计线程分别处于什么状态,grep java.lang.Thread.State dump18023 | awk '{print $2$3$4$5}' | sort | uniq -c

猜你在找的Java相关文章