【linux】cpu飙高和死锁问题排查

前言

        如今项目都部署在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飙高、死锁等问题的全部内容,如果有不对的地方,请指正,感谢观看!

        

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值