使用Jarboot排查Java进程CPU占用过高问题

使用Jarboot排查Java进程CPU占用过高问题

游戏|数码彩彩2025-06-09 8:02:02449A+A-

Jarboot本身是一个启动JAVA进程的工具,同时它还附带了一些调试命令。本文介绍下当Java的服务占用了过高的CPU资源时,该如何进行排查。

如果不借助工具,使用linux和jdk自带命令的话,步骤是这样的:

  1. top命令查出占用最高的进程;
  2. 使用jps -l 或ps -ef|grep java|grep -v grep命令,查出是哪个java服务搞的事;
  3. 使用ps -mp 进程PID -o THREAD,tid,time命令,查询具体是进程中哪个线程搞的事,命令解释:m表示显示所有的线程,p表示pid进程使用的cpu时间,-o是用户自定义的显示格式;
  4. 将线程ID转换为16进制格式,注意是小写,比如,线程ID为10则转换为a,必要时可借助计算器进行转换;
  5. 使用jdk的命令jstack 进程PID | grep tid(第四步转换后的结果) -A60,命令解释:-A60为查看结果后的60行;
  6. 上一步骤会直接打印出线程的执行栈信息,可直接定位出具体的哪一行代码出的事,到此,就可以到我们的业务代码中去检查、解决了。

使用自带的命令,大概要经历以上几个步骤才能最终定位到原因,接下来介绍使用工具的排查方法。

了解Jarboot请见:GitHub推荐Java进程启动器—Jarboot

首先使用Jarboot自带的示例程序模拟下CPU占用过高的情况,将算法执行次数设的较高,间隔设为0,这样执行过程会占用很高的CPU。

使用Jarboot排查Java进程CPU占用过高问题

示例程序

和上面的前两步一样,首先查出是哪个Java服务,接下来到Jarboot的界面上,选中对应的Java进程。

接下来只需要一条命令,thread -n 3,查看最忙的前3个线程,并打印堆栈,如下图:

使用Jarboot排查Java进程CPU占用过高问题

查看最忙的前几个线程

相比于不借助工具的更加方便,仅需一条命令就可以定位出哪一行。

如果不是用的Jarboot,还可以使用淘宝的Arthas工具,命令的使用是一样的。

点击这里复制本文地址 版权声明:本文内容由网友提供,该文观点仅代表作者本人。本站(https://www.angyang.net.cn)仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

昂扬百科 © All Rights Reserved.  渝ICP备2023000803号-3网赚杂谈