有時候我們可能會遇到CPU一直占用過高的情況。之前我的做法是溜嗜,直接查找到相關(guān)的進程,然后殺死或重啟即可架谎。這個方法對于一般的應(yīng)用問題還不大炸宵,但是要是是重要的環(huán)境的話,可萬萬使不得谷扣。
如果是重要的環(huán)境土全,那么我們就需要進行更加精確的定位。下面以定位Tomcat應(yīng)用占用CPU過高的問題為例会涎,講一下如何解決CPU占用過高問題裹匙。
一、首先我們需要先top確定一下那個進程占用CPU最高末秃。執(zhí)行命令top
?二概页、然后我們需要知道這個進程有哪些線程,又是哪個線程在占用大量CPU(科普一下:線程是進程的單位练慕,一個進程是由若干線程組成的)惰匙。執(zhí)行命令top -Hp 8104
這里我只是做簡單示例技掏,所以我們就假設(shè)第一個線程占用CPU過高
三、接著我們還需要知道這個線程的ID轉(zhuǎn)換為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條相關(guān)的語句
仔細查看這些信息說不定就能發(fā)現(xiàn)是什么問題了鸠真,因為我這里是正常的,所以看不到什么異常而已