有時候我們可能會遇到CPU一直占用過高的情況。之前我的做法是,直接查找到相關的進程,然后殺死或重啟即可。這個方法對於一般的應用問題還不大,但是要是是重要的環境的話,可萬萬使不得。
如果是重要的環境,那么我們就需要進行更加精確的定位。下面以定位Tomcat應用占用CPU過高的問題為例,講一下如何解決CPU占用過高問題。
一、首先我們需要先top確定一下那個進程占用CPU最高。執行命令top

二、然后我們需要知道這個進程有哪些線程,又是哪個線程在占用大量CPU(科普一下:線程是進程的單位,一個進程是由若干線程組成的)。執行命令top -Hp 8104

這里我只是做簡單示例,所以我們就假設第一個線程占用CPU過高
三、接着我們還需要知道這個線程的ID轉換為16進制的線程是多少

四、接着我們再使用jstack 8104|grep "1fdb" -A 30查看具體的進程信息。解釋一下jstack是Prints Java thread stack traces for a Java process, core file, or remote debug server。至於grep -A 30則是顯示(上下文,也就是上下行)下文30條相關的語句
仔細查看這些信息說不定就能發現是什么問題了,因為我這里是正常的,所以看不到什么異常而已

后續遇到實際問題我再進行補充完善
