和Linux打交道、在服務器上分析系統性能是每個Linux運維工程師或雲計算開發人員的工作日常,而性能優化被看做是軟件系統中最有挑戰的工作之一,讓工作人員很是頭疼。下面千鋒廣州小編就為大家分享雲計算學習中快速排查線上Linux系統故障的方法。
Linux性能優化是個系統工程,除了要學習那些基礎知識點之外,還有2點比較重要:
1)掌握性能優化的思路和方法,嘗試大量Linux性能工具;
2)從學習到輸出,即不斷實踐、從實踐中總結經驗。只有理論知識與實踐相結合,你才能把觀察到的性能問題跟系統原理關聯起來。
線上Linux系統故障的原因通常包括以下幾個方面:
一、CPU使用率過高
一個應用佔用CPU很高,除了確實是計算密集型應用之外,通常原因都是出現了死循環。排查技巧如下:
1)通過top命令定位佔用CPU高的進程。比如進程PID41843佔用CPU過高,明顯存在問題,定位到了進程id。當然如果你想只觀察進程PID41843的CPU和內存以及負載情況,可以使用命令:top -p 41843
2)通過top命令定位問題進程中每個線程佔用CPU情況。使用命令:top -p 41843 -H
3)通過jstack 命令定位問題代碼。比如發現線程PID41892佔用的CPU過高,就將這個PID轉換成16進制,其中PID41892轉化成16進製為a3a4。使用如下命令命令定位問題代碼:jstack 41892 | grep a3a4
二、內存佔用過高
在Java開發中,常見的異常及解決方法如下:
java.lang.OutOfMemoryError: PermGen space
異常出現原因:應用中有很多CLASS的話,就很可能出現PermGen space錯誤。WEB或者APP用了大量的第三方jar, 其大小超過了jvm默認的大小(4M)就會產生此錯誤信息。
解決方法:調整PermSize、MaxPermSize的大小;減少jar重複使用,重複佔用內存。
java.lang.OutOfMemoryError: Java heap space
異常出現原因:在JVM中,如果98%的時間是用於GC且可用的Heap size 不足2%的時候將拋出此異常信息。提示:Heap Size 最大不要超過可用物理內存的80%,一般的要將-Xms和-Xmx選項設置為相同,而-Xmn為1/4的-Xmx值。
異常原因排查步驟:
1)通過jstat命令查詢gc情況。通過top命令定位到內存佔用過高的進程PID後,排查該進程的GC情況,命令:jstat -gccause 41843 2000
2)通過jmap命令查詢進程實體類內存佔用情況。如果步驟1中發現,gc非常頻繁,則可以使用jmap命令查詢進程實體類內存佔用情況。命令:jmap -histo:live 41843 | head -n 100
3)通過jmap命令查詢進程堆的使用情況。如果以上沒有查出問題,可以看看進程中,新生代、老年代、永久代的使用情況。命令:jmap -heap 41843
如果發現頻繁的gc是因為新生代、老年代、永久代分配的大小有問題,則可以通過修改設置解決。
永久代解決方法:調整PermSize、MaxPermSize的大小;減少jar重複使用,重複佔用內存。
新生代、老年代解決方法:調整Xms -Xmx -Xmn的大小。