上次出現線上CPU100%的情況是論壇發帖一個正則表達式引起的,當時各項目耦合比較緊密,導致大量網站癱瘓。多次重啟問題依然存在。后來通過查看代碼以及運維操作解決的該問題。記錄一下基本的排查過程,幫助以后能快速解決該類問題。
1. 查看cpu和內存的使用情況
top
image.png
2.找到進程中的占cpu最高和最耗時的線程
ps -mp -pid -o Thread,tid,time
image.png
3. 將TID轉換為16進制
printf "%x\n" tid
image.png
4.使用jstack 命令找到線程堆棧信息
[root@VM_0_17_centos ~]# jstack 26427 |grep 673d -A 30
image.png
注:上圖中的tid指java線程id,nid指native線程id。
總結:
1、top命令:Linux命令。可以查看實時的CPU使用情況。也可以查看最近一段時間的CPU使用情況。
2、PS命令:Linux命令。強大的進程狀態監控命令。可以查看進程以及進程中線程的當前CPU使用情況。屬于當前狀態的采樣數據。
3、jstack:Java提供的命令。可以查看某個進程的當前線程棧運行情況。根據這個命令的輸出可以定位某個進程的所有線程的當前運行狀態、運行代碼,以及是否死鎖等等。
4、pstack:Linux命令。可以查看某個進程的當前線程棧運行情況。