1、查看主進程占用cpu高:
此處主進程:27823
[root@storage-02 ~]# top top - 1:02:33 up 2 days, 1:54, 3 users, load average: 13.12, 13.31, 13.23 Tasks: 180 total, 3 running, 177 sleeping, 0 stopped, 0 zombie %Cpu(s):100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 8002908 total, 582432 free, 3442856 used, 3977620 buff/cache KiB Swap: 8388604 total, 8388604 free, 0 used. 3802688 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 27823 root 20 0 7041832 1.527g 13328 S 783.3 20.0 14494:52 java 21735 root 20 0 157720 2272 1552 R 16.7 0.0 0:00.01 top 1 root 20 0 190988 4012 2416 S 0.0 0.1 48:29.91 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:03.18 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:31.90 ksoftirqd/0
2、按照線程占用cpu由高到低進行排查:
通過主進程查看所有的線程,此處只列出了一部分線程TID為線程號,THREAD為線程的各項內容
[root@storage-02 ~]# ps -mp 27823 -o THREAD,tid,time | sort -rn |head -6 USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME storage+ 38.3 19 - - - - 28296 2-22:05:22 storage+ 38.3 19 - - - - 28273 2-22:07:21 storage+ 38.3 19 - - - - 28241 2-22:10:49 storage+ 132 - - - - - - 10-01:55:19 storage+ 12.1 19 - futex_ - - 28212 22:15:30
找到線程占用高的線程id (tid) 例如:28296 28273 28241 各占用30%多
將線程號轉化為16進制:
[root@zz-p-storagesdk-api01 ~]# printf "%x\n" 28296 6e88 [root@storage-02 service]# printf "%x\n" 28273 6e71 [root@storage-02 service]# printf "%x\n" 28241 6e51
通過主進程好搜索所有的線程執行的內容,
注意:必須使用項目運行的用戶,以及使用的jdk版本下的jstack去查看
[root@zz-p-storagesdk-api01 ~]# sudo -u root /usr/local/jdk1.8/bin/jstack 27823 |grep 6e88 -A 30
[root@zz-p-storagesdk-api01 ~]# sudo -u root /usr/local/jdk1.8/bin/jstack 27823 |grep 6e71 -A 30
[root@zz-p-storagesdk-api01 ~]# sudo -u root /usr/local/jdk1.8/bin/jstack 27823 |grep 6e51 -A 30