之前在公司內部分享平臺發一篇在生產環境排查的CPU性能問題的文章,比較通用,轉到CSDN上與大家分享
問題
業務系統的Tomcat服務器跑了一段時間後,發現業務系統進程佔用的CPU資源在70%-80%,加上自助,移動端和報表,整個服務器的CPU處理將近100%運行狀態。用戶使用時非常慢。
問題查找
通過process explorer查看Tomcat進程下的線程
下載地址: https://technet.microsoft.com/en-us/sysinternals/bb896653/
漢化後的版本:http://download.csdn.net/detail/p_3er/9169985
下載後直接打開運行就可以了。
圖一 process explorer主界面
點開tomcat進程:
圖二:進程查看
現在服務器處於正常狀態,無CPU佔用過高的線程,我們以4920 TID線程爲例,下面我們要通過jstack把進程下所以的Java線程棧的內容打印出文本中。
可以通過圖一發現該tomcat進程pid爲5936
圖三 查看pid
打開命令行,輸入jstack -l 5936 > D:/java.stack
圖四 jstack –l
打開java.stack
通過process explorer獲取到的線程TID對應的是stack文本線程棧描述內容中的tid的十進制值。
我們把TID爲4920轉成十六進制爲1338,然後在stack文本搜索1338,,找到此線程棧的描述內容爲:
圖五 查找線程描述
這裏都是正常的,如果是不正常的,可以根據描述查看相關代碼,進行優化。類似圖六,可以查看異常代碼所在行數。
圖六 查看異常代碼所在行數