记一次线上Java项目CPU突然飙升100%的排查

1使用top命令

发现进程pid为2862的java进程cpu占用率很高

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                          
 2862 root      20   0 2503876 112732  13048 S  99.3  6.0   0:07.21 java                                                                                                                          
 2442 root      20   0  158420   2940   1520 S  0.3  0.2   0:00.47 top                                                                                                                           
    1 root      20   0  128092   6708   3952 S  0.0  0.4   0:01.17 systemd                                                                                                                       
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                                                                                                      
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.08 ksoftirqd/0                                                                                                                   
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                                                                                                                  
    6 root      20   0       0      0      0 S  0.0  0.0   0:00.02 kworker/u2
2找到java进程pid对应的线程

发现pid为2866的线程cpu使用率很高

top -Hp 2862
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                                                                               
 2866 root      20   0 2503876 114508  13048 S  0.0  63.1   0:03.28 java                                                                                             
 2862 root      20   0 2503876 114508  13048 S  0.0  6.1   0:00.03 java 
 
 2878 root      20   0 2503876 114508  13048 S  0.0  6.1   0:00.24 VM Thread                                                                                                                     
 2879 root      20   0 2503876 114508  13048 S  0.0  6.1   0:00.00 Reference Handl                                                                                                               
 2880 root      20   0 2503876 114508  13048 S  0.0  6.1   0:00.00 Finalizer                                                                                                                     
 2881 root      20   0 2503876 114508  13048 S  0.0  6.1   0:00.00 Signal Dispatch                                                                                                               
 2882 root      20   0 2503876 114508  13048 S  0.0  6.1   0:02.48 C2 CompilerThre                                                                                                               
 2883 root      20   0 2503876 114508  13048 S  0.0  6.1   0:00.82 C1 CompilerThre                                                                                                               
 2884 root      20   0 2503876 114508  13048 S  0.0  6.1   0:00.00 Service Thread   
3打印对应线程pid的16进制数

找到使用率高的线程的16进制数 b32

[root@localhost javaapps]# printf '%x' 2866
b32[root@localhost javaapps]# 
4通过jstack将对应java进程的线程信息答应到x.txt中
 jstack 2862 > x.txt
5.在文件中搜索使用率高的线程(通过线程的16进制数)
vi x.txt
# 使用/b32搜索占用率高的线程
Full thread dump OpenJDK 64-Bit Server VM (25.302-b08 mixed mode):

"Attach Listener" #27 daemon prio=9 os_prio=0 tid=0x00007fdec0001800 nid=0x5ec6 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"DestroyJavaVM" #26 prio=5 os_prio=0 tid=0x00007fdee8009800 nid=0xb32 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"http-nio-8081-Acceptor" #24 daemon prio=5 os_prio=0 tid=0x00007fdee8a1c800 nid=0xbbe runnable [0x00007fdeb75f4000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
        at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:421)
        at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:249)
        - locked <0x00000000e3d3c680> (a java.lang.Object)
/b32

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值