前言:
如今项目都部署在Linux操作系统下而非Windows操作系统,所以掌握Linux系统下对Java进程进行cpu飙高、死锁等问题的排查是很有必要的。
cpu飙高案例:
(1)首先创建一个.java文件,在文件中编写能使CPU飙高的java代码。
(2)使用javac、java命令编译并运行该java文件。
(3)使用top命令,查看此时的系统资源使用情况,可以看到进程ID为13096的进程CPU使用率达到了100%!!!
(4)结束使cpu飙高的java程序后,cpu使用率情况趋于正常。
定位cpu飙高的案例:
(1)运行java程序,使用top命令查看进程使用系统资源的情况,发现PID为14010的进程,CPU使用率异常。
(2)再使用top -H -p 14010命令,查看进程14010下线程cpu的使用情况,可以发现,线程14030的cpu占用率异常。
(3)使用printf "0x%x\n" 14030命令,将线程id转为16进制。
(4)最后使用jstack命令,将导致cpu飙高的问题线程的快照打印。可以看到,是CpuTest程序中第5行代码导致的cpu飙高,至此,完成了cpu飙高的问题定位。
死锁问题排查案例:
(1)编写并运行死锁程序。
(2)使用jps命令,查看此时正在运行的java进程。
(3)当出现死锁时,使用jstack命令打印线程堆栈时会有关键字'deadlock',因此我们可以使用jstack 65361 | grep 'deadlock' -A 50命令来筛选出与死锁有关的信息。可以看到死锁的原因是a、b线程在持有锁的同时,都尝试去获取对方未释放的锁。
以上就是本文关于如何在linux环境下排查cpu飙高、死锁等问题的全部内容,如果有不对的地方,请指正,感谢观看!