暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Java的CPU占用高问题排查

原创 Shyai 2022-11-10
1307

在项目中经常会碰到CPU占用率过高的问题,那么碰到这类问题应当如何处理呢?下面提供一种处理思路:

首先top -H -p <pid>以线程的模式查看java应用的运行情况,找到占用cpu或者内存大的线程,记录线程id,然后printf %x <tid>转为16进制,再jstack -l <pid> > thread.log把java进程的thread dump出来,从里面找到tid,分析是哪个线程占用了系统资源。具体操作步骤如下:

1、定位Java进程PID

通过Linux的top命令查看高cpu占用的java的进程PID

2、定位cpu占用高的java线程

# 以线程的模式查看Java应用的运行情况,找到占用cpu大的线程,记录线程id。

 top -H -p <pid>

3、转换线程id为16进制

# 通过Linux的命令,获取tid的16进制表示。

 printf "%x\n" <tid>

4、通过jstack查看问题线程的状态:

jstack <pid> |grep <tid的16进制> -A 100ck <pid> |grep <tid的16进制> -A 100

注意:这个命令的最后的-A 100,如果不加这个,那么只能看到该问题线程是哪个,其堆栈的stack信息看不到,这个100你可以理解为显示多少行,你可以设置为30,40等等,不过其实也用不了那么多的。

如果你的java应用时tomcat用户启动,然而你现在还是用root用户登录,则使用如下命令执行jstack

sudo -u tomcat /usr/local/java/bin/jstack <pid> | grep <tid的16禁止> -A 100

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论