当前位置:   article > 正文

JAVA应用服务器如何快速定位CPU问题

JAVA应用服务器如何快速定位CPU问题

如果服务器上部署了多个Java站点服务和Java微服务,并且突然接收到CPU异常告警,我们需要逐步确定是哪个服务进程造成了CPU过载,接着是哪个线程,并最终定位到是哪段代码导致了这个问题
简要步骤如下:

步骤一、找到最耗CPU的进程

工具:top
方法:top
在这里插入图片描述

步骤二、找到最耗CPU的线程

工具:top -Hp
在这里如上图,进程30528内,最耗CPU的线程PID为30743插入图片描述
如上图,进程30528内,最耗CPU的线程PID为30743

步骤三、查看堆栈定位线程

定位进程在干嘛,定位对应代码首先,将线程PID转化为16进制。工具:printf
方法:printf “%x\n” 30743
在这里插入图片描述
如上图,30743对应的16进制是7817,当然,这一步也可以用计算器来实现
在这里插入图片描述
之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的
图片
步骤四、查看堆栈,找到线程在干嘛。
工具:jstack
安装:

注意:如果是用yum 安装的openjdk ,是不会带java 开发调试工具 jstack jmap 等.若是想要使用jstack命令查看java程序线程信息,安装jstack 直接用 yum install jstack 会报错 No package jstack available

 yum list --showduplicate | grep java-1.8 | grep devel
 找到合适的jdk后
 yum install java-1.8.0-openjdk-devel.x86_64
  • 1
  • 2
  • 3

方法:jstack 1076|grep '7817’ -C5 --color
在这里插入图片描述
如上图,找到了耗CPU高的线程对应的线程名称,以及看到了该线程正在执行代码的堆栈。最后,根据堆栈里的信息,找到对应的代码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/667877
推荐阅读
相关标签
  

闽ICP备14008679号