系統運行緩慢,CPU 100%,以及Full GC次數過多的排查思路

經過top命令查看CPU狀況,若是CPU比較高,則經過top -Hp <pid>命令查看當前進程的各個線程運行狀況,找出CPU太高的線程以後,將其線程id轉換爲十六進制的表現形式,而後在jstack日誌中查看該線程主要在進行的工做。這裏有兩種狀況:eclipse

若是該現場爲用戶線程,則經過該線程的堆棧信息查看其具體是在哪處用戶代碼比較消耗cpu工具

若是該線程爲vm thread,則經過jstat -gcutil <pid> <period> <times>命令監控當前系統的GC情況,而後經過jmap dump:format=b,file=<filepath> <pid>導出系統當前的內存數據。導出以後將內存狀況放到eclipse的mat工具中分析便可得出內存中什麼對象比較消耗內存,進而能夠處理相關代碼。線程

 

top命令看到CPU並不高,而且系統內存佔用率也比較低。此時能夠考慮是否因爲另外三種狀況致使。日誌

若是是接口調用比較耗時,而且不定時出現,則能夠經過壓測方式加大阻塞點出現的頻率,從而經過jstack查看堆棧信息,找到阻塞點orm

若是某功能忽然出現停滯,狀況沒法復現,能夠經過屢次導出jstack日誌的方式比對哪些用戶線程一直處於等待狀態,這些線程就是可能存在問題的線程對象

若是經過jstack能夠查看到死鎖,則能夠檢查死鎖的兩個線程的具體阻塞點,從而處理相應問題接口

相關文章
相關標籤/搜索