本文檔介紹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功能鍵。