運維開發必備:如何排查Linux系統故障?

和Linux打交道、在服務器上分析系統性能是每個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的大小。

版權聲明:本文源自 網絡, 於,由 楠木軒 整理發佈,共 1382 字。

轉載請註明: 運維開發必備:如何排查Linux系統故障? - 楠木軒