Java线程运行诊断

首先说明图片都是黑马程序员课上的图片,为了更好理解,所以我把他们的运行截图直接拿来了,因为我的虚拟机上没有JAVA相关的东西。

比如出现了CPU占用过多问题我们应该怎么做?(其他的也是类似的)

1.用nohup java 命令后台运行程序

2.用top定位哪个进程对cpu的占用过高

以上图片可以看到32655的进程号占用CPU过多

3.ps H -eo pid,tid,%cpu|grep 进程id(用ps命令进一步定位,哪个线程引起的cpu占用过高)

此时可以看到线程id 32665占用的CPU过高

4.jstack 进程id

 5.对你的线程id进行一个16进制的转换

 我们这里转换之后是一个7F99

此时再看我们jstack出来的信息,说明了你的哪个类哪行出现了问题

 此时再看我们的代码第8行

 有一个while(true)问题就在这里

总结:

1.用nohup java 命令后台运行程序

2.用top定位哪个进程对cpu的占用过高

3.ps H -eo pid,tid,%cpu|grep 进程id(用ps命令进一步定位,哪个线程引起的cpu占用过高)

4.jstack 进程id,根据线程id的16进制找到出错地方

原文地址:https://www.cnblogs.com/dmzna/p/12933444.html