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