和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的大小。