現象
如圖所示,cpu使用率高達99%,cpu load高達50
排查步驟
1、定位問題發生的時間
通過監控系統查看cpu使用率和load歷史趨勢,發現cpu使用率上升時間與cpuload上升時間相同
2、定位問題進程
通過top命令初步定位到是3845這個進程佔用了大量的cpu
3、定位問題線程
top -Hp $PID
發現11953-11954,11414-11415這四個線程花費cpu時間最長
或者
[root@izbp13gpxv4kgw67hji5m1z hsperfdata_root]# ps -mp 3845 -o THREAD,tid,time
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
102 188 - - - - - - 2-01:49:32
。。。
102 0.0 19 - futex_ - - 10988 00:00:44
102 3.1 19 - futex_ - - 11224 00:49:18
102 7.2 19 - futex_ - - 11414 01:54:35
102 7.2 19 - futex_ - - 11415 01:53:57
102 7.3 19 - futex_ - - 11953 01:56:14
102 7.2 19 - futex_ - - 11954 01:54:05
102 6.2 19 - - - - 12837 01:38:08
102 61.7 19 - - - - 24914 00:00:18
102 41.1 19 - - - - 26411 00:00:02
102 55.2 19 - - - - 26468 00:00:02
102 29.6 19 - - - - 26651 00:00:00
102 0.0 19 - - - - 26799 00:00:00
4、定位代碼
1、 將需要的線程ID轉換爲16進制格式:
[root@izbp13gpxv4kgw67hji5m1z hsperfdata_root]# printf "%x\n" 11953
2eb1
2、再使用jstack命令打印線程堆棧信息,命令格式:jstack pid |grep tid -A 30
[root@izbp13gpxv4kgw67hji5m1z hsperfdata_root]# jstack 3845 |grep -A 30 2eb1