如何找出消耗CPU最多的線程?
1.使用 top -c 找出所有當前進程的運行列表
2. 按P對所有進程按CPU使用率進行排序,找出消耗最高的線程PID
3.使用 top -Hp PID,查出里面消耗最高的進程,繼續按P排序
4.這個線程PID是十進制的,我們需要轉換為十六進制
此時已經找到了消耗CPU資源最多的線程,下面為排查問題過程
5. 導出進程快照
jstack -l PID> ./PID.stack //PID為進程PID
6.再用grep查看一下線程在文件里做了啥
cat PID.stack |grep '線程PID十六進制' -C 8
實例
1. top -c
2. 按P

顯示Java進程 PID 為 2609 的java進程消耗最高
3. top -Hp 2609
4. 按P

可以看到 2854 CPU消耗最高,轉換為十六進制:b26
5. jstack -l 2609 > ./2609.stack
6. cat 2609.stack |grep 'b26' -C 8
查看問題
