通过Arthas排查Java程序CPU占用过高问题
需要工具包:arthas-packaging-3.2.0-bin.zip
模拟问题
使用如下代码制造一个CPU占用100%的情况
/**
* 制造一个死循环,实现cpu100%
*/
@RequestMapping("/lock")
public void lock(){
System.out.println("开始死锁操作。。。。");
StringBuffer stringBuffer = new StringBuffer();
while(true){
String uuid = UUID.randomUUID().toString();
}
}
这是一个SpringBoot的应用,通过使用命令curl http://xxx:xxx/lock
,即可触发
排查步骤
-
上传arthas-packaging-3.2.0-bin.zip到服务器,创建目录
arthas
并将zip
包拷贝到该目录下,解压 -
使用
top
命令,查看当前CPU的情况,记录下占用率最高的进程pid
-
下记录下cpu占用过高的pid(本例中是2864)
-
执行
java -jar arthas-boot.jar
- 输入
1
(序号),根据实际情况选择对应的序号,会进入arthas命令行的执行程序中
-
输入
thread -n 3
会列举出当前三个占用CPU最高的线程,根据图中可以定位到具体的业务代码行数
- 除此之外,也可以使用
dashboard
命令查看当前的Java程序运行情况
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/13142.html