本文檔介紹Linux雲端服務器負載高導致ECS執行個體運行變慢、自動關機或重啟、無法登入等異常問題的排查方法和解決方案。
問題描述
在您使用ECS執行個體過程中,可能會遇到執行個體系統負載較高的情況,負載過高,可能會引發一系列異常問題,簡單說明如下:
CPU使用率或負載過高:一般來說,當CPU使用率≥80%時,定義為CPU使用率過高。CPU使用率持續過高,可能會導致執行個體運行速度變慢,自動關機或重啟、無法登入等問題。
頻寬使用率過高:一般來說,頻寬使用率≥當前頻寬80%時,定義為頻寬使用率過高。頻寬使用率持續過高,將影響執行個體的網路連通性或網路吞吐,例如執行個體無法遠端連線、網速過慢等。
記憶體使用量率過高:一般來說,當記憶體使用量率≥80%時,定義為記憶體使用量率過高。記憶體使用量率過高,可能會出現系統卡頓、內部服務響應速度變慢等問題。
I/O使用率過高:一般來說,當前I/O讀寫≥該雲端硬碟I/O的80%時,定義為I/O使用率過高。I/O使用率過高,可能會出現檔案讀寫變慢、應用效能下降或報錯等問題。
問題排查
您可以使用SAR工具或htop工具定位該執行個體的負載過高及各資源的使用方式。
使用sar工具查看執行個體各資源使用方式
sar是System Activity Reporter(系統活動情況報告)的縮寫,sar工具對系統狀態進行取樣後,通過計算資料和比例來表達系統當前的運行狀態。其特點是可以連續對系統取樣,獲得大量的取樣資料。其取樣資料和分析結果可以存入檔案,所需的負載很小。
sar是Linux系統中較為全面的效能分析工具,可以從多個方面對系統的活動進行監控和報告,包括檔案讀寫情況、系統調用使用方式、串口、CPU效率、記憶體使用量情況、進程活動及IPC(Inter-Process Communication,處理序間通訊)等。
安裝sar工具
如果您的ECS執行個體中預設未安裝sar工具,可參考如下步驟進行安裝。
使用VNC串連Linux系統的ECS執行個體。
具體操作,請參見使用VNC登入執行個體。
執行如下命令,安裝sar工具。
yum install sysstat
執行如下命令,啟動sysstat服務。
systemctl start sysstat
執行如下命令,查看sysstat服務狀態。
systemctl status sysstat
當返回系統中出現
Active: active (exited)
表示sysstat服務已啟動。
查看CPU使用率
執行如下命令,查看CPU負載。
sar -u 1 5 #每隔一秒重新整理,重新整理5次
系統顯示類似如下。
Linux 3.10.0-123.9.3.el7.x8664 (iZ23pddtofdZ) 07/04/2016 _x86_64 (1 CPU)
10:16:35 AM CPU %user %nice %system %iowait %steal %idle
10:16:36 AM all 14.14 0.00 1.01 0.00 0.00 84.85
10:16:37 AM all 14.14 0.00 0.00 1.01 0.00 84.85
10:16:38 AM all 0.00 0.00 1.01 0.00 0.00 98.99
10:16:39 AM all 0.00 0.00 0.00 0.00 0.00 100.00
10:16:40 AM all 1.00 0.00 0.00 0.00 0.00 99.00
Average: all 5.86 0.00 0.40 0.20 0.00 93.54
顯示結果主要欄位說明
%user:使用者模式下消耗的CPU時間比例。
%nice:通過nice改變了進程調度優先順序的進程,在使用者模式下消耗的CPU時間比例。
%system:系統模式下消耗的CPU時間比例。
%iowait:CPU等待磁碟I/O導致空閑狀態消耗的時間比例。
%steal:利用Xen等作業系統虛擬化技術,等待其它虛擬CPU計算佔用的時間比例。
%idle:CPU空閑時間百分比。
查看隊列長度和CPU平均負載
執行如下命令,查看隊列長度和CPU平均負載。
sar -q 1 10 #每隔一秒重新整理,重新整理10次
系統顯示類似如下。
Linux 3.10.0-123.9.3.el7.x8664 (iZ23pddtofdZ) 07/04/2016 _x86_64 (1 CPU)
10:23:13 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
10:23:14 AM 0 142 0.00 0.01 0.05 0
10:23:15 AM 0 142 0.00 0.01 0.05 0
10:23:16 AM 0 142 0.00 0.01 0.05 0
10:23:17 AM 0 142 0.00 0.01 0.05 0
10:23:18 AM 0 142 0.00 0.01 0.05 0
10:23:19 AM 0 142 0.00 0.01 0.05 0
Average: 0 142 0.00 0.01 0.05 0
顯示結果主要欄位說明
runq-sz:運行隊列的長度,即等待啟動並執行進程數。
plist-sz:進程列表中進程(processes)和線程(threads)的數量。
ldavg-1:最後1分鐘的系統平均負載。
ldavg-5:最後5分鐘的系統平均負載。
ldavg-15:最後15分鐘的系統平均負載。
查看磁碟使用方式
執行如下命令,查看磁碟讀寫負載情況。
sar -d 1 3 #每隔一秒重新整理,重新整理3次
系統顯示類似如下。
Linux 5.10.134-13.al8.x86_64 (iZ2zegjvrdtgifd77gadyqZ) 03/09/2023 _x86_64_ (8 CPU)
02:41:04 PM DEV tps rkB/s wkB/s areq-sz aqu-sz await svctm %util
02:41:05 PM dev253-0 1.00 0.00 4.00 4.00 0.00 0.00 1.00 0.10
02:41:06 PM dev253-0 1.00 0.00 4.00 4.00 0.00 1.00 1.00 0.10
02:41:07 PM dev253-0 1.00 0.00 4.00 4.00 0.00 0.00 2.00 0.20
02:41:08 PM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:41:09 PM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: dev253-0 0.60 0.00 2.40 4.00 0.00 0.33 1.33 0.08
顯示結果主要欄位說明
tps:每秒I/O的傳輸總數。
rd_sec/s:每秒讀取的扇區的次數。
wr_sec/s:每秒寫入的扇區的次數。
avgrq-sz:平均每次磁碟I/O操作的扇區大小。
avgqu-sz:磁碟請求隊列的平均長度。
await:從請求磁碟操作到系統完成處理,每次請求的平均消耗時間,包括請求隊列等待時間。
svctm:系統處理每次請求的平均時間。
%util:I/O請求佔用的CPU百分比,值越高,說明I/O越慢。
查看記憶體負載
執行如下命令,查看記憶體負載。
sar -r 1 3 #每隔一秒重新整理,重新整理3次
系統顯示類似如下。
Linux 3.10.0-123.9.3.el7.x8664 (iZ23pddtofdZ) 07/04/2016 _x86_64 (1 CPU)
10:27:34 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
10:27:35 AM 275992 740664 72.85 181552 315340 362052 35.61 471216 115828 60
10:27:36 AM 276024 740632 72.85 181552 315340 362052 35.61 471220 115828 64
10:27:37 AM 276024 740632 72.85 181552 315340 362052 35.61 471220 115828 64
Average: 276013 740643 72.85 181552 315340 362052 35.61 471219 115828 63
顯示結果主要欄位說明
kbmemfree:該值和free命令中的free值基本一致,不包括buffer和cache空間。
kbmemused:該值和free命令中的used值基本一致,包括buffer和cache空間。
%memused:實體記憶體使用率,該值是kbmemused和記憶體總量(不包括swap記憶體)的百分比。
kbbuffers和kbcached:這兩個值和free命令中的buffer和cache一致。
kbcommit:保證當前系統所需要的記憶體,即為了確保不溢出而需要的記憶體,即RAM加上swap的記憶體。
%commit:該值是kbcommit與記憶體總量(包括swap記憶體)的百分比。
查看I/O負載
執行如下命令,查看I/O負載。
sar -b 1 10 #每隔一秒重新整理,重新整理10次
系統顯示類似如下。
Linux 5.10.134-13.al8.x86_64 (iZ2zegjvrdtgifd77gadyqZ) 03/09/2023 _x86_64_ (8 CPU)
02:34:00 PM tps rtps wtps bread/s bwrtn/s
02:34:01 PM 6.00 0.00 6.00 0.00 80.00
02:34:02 PM 55.00 0.00 55.00 0.00 632.00
02:34:03 PM 1.00 0.00 1.00 0.00 8.00
02:34:04 PM 0.00 0.00 0.00 0.00 0.00
02:34:05 PM 0.00 0.00 0.00 0.00 0.00
02:34:06 PM 2.00 0.00 2.00 0.00 136.00
02:34:07 PM 82.00 0.00 82.00 0.00 888.00
02:34:08 PM 0.00 0.00 0.00 0.00 0.00
02:34:09 PM 0.00 0.00 0.00 0.00 0.00
02:34:10 PM 0.00 0.00 0.00 0.00 0.00
Average: 14.60 0.00 14.60 0.00 174.40
顯示結果主要欄位說明
tps:每秒鐘向物理裝置請求資料次數。
rtps:每秒鐘向物理裝置讀請求次數。
wtps:每秒鐘向物理裝置寫請求次數。
bread/s:每秒鐘從物理裝置讀入的資料量。
bwrtn/s:每秒鐘向物理裝置寫入的資料量。
查看swap分區頁面交換情況
執行如下命令,查看swap分區頁面交換情況。
sar -W 1 3
系統顯示類似如下。
Linux 3.10.0-123.9.3.el7.x8664 (iZ23pddtofdZ) 07/04/2016 _x86_64 (1 CPU)
10:28:59 AM pswpin/s pswpout/s
10:29:00 AM 0.00 0.00
10:29:01 AM 0.00 0.00
10:29:02 AM 0.00 0.00
Average: 0.00 0.00
顯示結果主要欄位說明
pswpin/s:每秒從交換分區到系統的交換頁面(swap page)數量。
pswpout/s:每秒從系統交換到swap的交換頁面(swap page)的數量。
常見sar命令參數
sar命令的參數說明如下,區分大小寫。
-A:匯總所有的報告。
-a:報告檔案讀寫使用方式。
-B:報告附加緩衝的使用方式。
-b:報告緩衝的使用方式。
-c:報告系統調用的使用方式。
-d:報告磁碟的使用方式。
-g:報告串口的使用方式。
-h:報告關於buffer使用的統計資料。
-m:報告IPC訊息佇列和訊號量的使用方式。
-n:報告命名cache的使用方式。
-p:報告調頁活動的使用方式。
-q:報告運行隊列和交換隊列的平均長度。
-R:報告進程的活動情況。
-r:報告沒有使用的記憶體頁面和硬碟塊。
-u:報告CPU的利用率。
-v:報告進程、i節點、檔案和鎖表狀態。
-w:報告系統交換活動狀況。
-y:報告TTY裝置活動狀況。
使用htop查看系統內各進程負載情況
htop是Linux系統中的一個互動進程查看器,可以很直觀地查看CPU、記憶體、swap的使用方式及平均負載。
遠端連線Linux系統的ECS執行個體。
具體操作,請參見串連方式概述。
執行如下命令,安裝htop工具。
yum install htop
執行如下命令,啟動htop監控工具。
htop
使用htop工具查看系統負載。
htop啟動後的介面如下圖所示,不同地區說明如下:
①:左側顯示CPU、記憶體、swap交換區的使用方式,右側顯示進程總數、平均負載及系統已耗用時間。
②:當前系統中所有進程的使用方式,可通過單擊CPU%或MEM%對CPU使用率及記憶體使用量率排序,查看使用率較高的進程。
③F1到F10功能鍵。