程序死循环、死锁问题定位

本文介绍了如何定位程序中的死循环和死锁问题。通过模拟代码、监控CPU负载、使用jstack等工具,可以有效地分析出CPU利用率高的原因,定位到死循环的代码段或死锁的位置,从而解决系统运行缓慢的问题。
摘要由CSDN通过智能技术生成

程序死循环、死锁问题定位

在开发过程中,可能由于代码设计问题导致出现了死循环或者死锁的问题,使服务器CPU负载飙高从而导致系统运行缓慢,因此要特别注意防止死循环和死锁的发生。如监控服务器状态时,如果发现CPU负载或利用率飙得很高,这时候就要定位出可能出现的问题,这是在开发中非常重要的能力之一。
主要方法:top 、jstack

定位死循环

  • 模拟一段死循环代码(我这里参考了其他博客的代码来做实验–链接

  • 打jar包上传到Linux服务端(usr/local/jar)

mvn clean package -Dmaven.test.skip
  • 运行jar包
nohup java -jar monitor_tuning-0.0.1-SNAPSHOT.jar &
  • 访问死循环方法对应的url地址执行死循环代码,top查看运行的jar的进程ID

在这里插入图片描述
可以看到负载和cpu利用率都飙得很高

  • 问题排查,实验jstack获取对应进程的线程堆栈信息,下载到本地查看
jstack 108196 >108196.txt
rz 108196.txt
  • top -p 108196 -H 查看进程中cpu利用率最高的线程ID记录下来在jstack导出的文件中查看对应信息
    在这里插入图片描述
  • 使用printf "%x" 108262 转化为16进制然后在jstack导出的文件中查找对应线程ID的信息

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值