压测中,服务器CPU过高,异常线程排查

场景:压测JAVA项目时,JAVA进程CPU使用率过高,可通过以下方法排查异常线程

在Java应用的性能测试中,很多性能问题可以通过观察线程堆栈来发现,Jstack是JVM自带dump线程堆栈的工具,很轻量易用,并且执行时不会对性能造成很大的影响。灵活的使用jstack可以发现很多隐秘的性能问题,是定位问题不可多得的好帮手。

第一种方法:

1、top #定位异常的进程

 

 

(1)、通过top命令看到1817这个进程占用cpu最高

(2)、使用jstack命令,将进程1817的日志导出,jstack -l 1817>1817.txt

2、top -H -p 1817  #查看进程pid得所有线程

(1)、通过上述命令我们可以看到1817进程的所有线程中,1833这个线程cpu占用率最高

(2)、通过 printf "%x" 1833,可以将1833线程的pid转换成16进制

3、通过1833转换成的16进制 729到步骤1导出的txt里搜索到异常的线程

 

第二种方法:

top #定位异常的JAVA进程PID

jstack -l pid >/root/test.log  #将该进程的日志信息写入root目录的test.log文件里

然后在test.log里搜索是否含有"deadlock"(死锁)

线程状态介绍
  • 死锁,Deadlock(重点关注) :一般指多个线程调用间,进入相互资源占用,导致一直等待无法释放的情况。

  • 等待资源,Waiting on condition(重点关注) :等待资源,或等待某个条件的发生。
  • 等待获取监视器,Waiting on monitor entry(重点关注)

 

posted @ 2020-12-23 10:52  Frank13054  阅读(916)  评论(0编辑  收藏  举报