1. 首先确定进程的 ID ,可以使用top 命令直接查看,结果如下(以PID为11281为例):
2. 查看该进程中哪个线程占用大量 CPU,执行 top -H -p 11281 结果如下:
我们以11373这个线程为例,首先将 11373转成 16 进制是 2c6d(可以用开源中国在线工具转换)
3. 接下来我们将进程中的所有线程输出到一个文件中,执行:jstack 11281> jstack.txt
4. 在进程中查找对应的线程 ID,执行:cat jstack.txt | grep -i 2c6d
结果是:
"cluster-ClusterId{value='5a9232f83b5d932c11711f2f', description='mongodb database'}-192.168.0.196:27017" #21 daemon prio=5 os_prio=0 tid=0x00007f5a69709800 nid=0x2c6d runnable [0x00007f5a88c6a000]
由此可以看出是mongodb 的cluster一直占用着CPU资源。