1. 程式人生 > >Linux 系統負載查詢及分析說明

Linux 系統負載查詢及分析說明

Linux 系統出現宕機或卡頓時,可以參閱如下步驟進行整體排查:

  1. 檢查伺服器程序與服務否佔用了過多記憶體,或者記憶體沒有正常釋放,導致出現記憶體溢位,系統宕機。
  2. 檢查 /var/spool/cron 等系統配置中是否有 cron(計劃任務、自動任務)在對應時間段內執行。
  3. 檢查 Web 伺服器的引數是否超過了伺服器的效能。比如最大連線數過高等。
  4. 檢查程序數是否非常高,導致服務癱瘓,機器假死。
  5. 檢視系統日誌中是否有異常記錄。
  6. 檢查磁碟是否有壞塊。
  7. 核心消耗過大,檢視是否有瞬間資源佔用過大的程序或服務。
  8. 檢視是否有異常程序,是否存在被攻擊或入侵症狀。

使用 sar 檢視 Linux 系統各項資源使用情況


sar 是System Activity Reporter(系統活動情況報告)的縮寫。sar 工具對系統狀態進行取樣後,=通過計算資料和比例來表達系統當前的執行狀態。其特點是可以連續對系統取樣,獲得大量的取樣資料。其取樣資料和分析結果可以存入檔案,所需的負載很小。

sar 是 Linux 系統中較為全面的效能分析工具,可以從多個方面對系統的活動進行監控和報告,包括檔案讀寫情況、系統呼叫使用情況、串列埠、CPU 效率、記憶體使用情況、程序活動及 IPC 有關的活動情況等等。

  • 安裝
    使用 yum install sysstat 進行安裝,然後使用 /etc/init.d/sysstat start 啟動服務。

  • 檢視 CPU 負載
    用法:  
    sar -u 1 5

    示例輸出:  
    sar -u 1 5
    Linux 3.10.0-123.9.3.el7.x86_64 (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 空閒時間比例。

 

  • 檢視平均負載
    用法:  
    sar -q 1 60

    示例輸出:  
    sar -q 1 6
    Linux 3.10.0-123.9.3.el7.x86_64 (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
    

    回顯說明:
    指定 -q 後,可以檢視執行佇列中的程序數、系統上的程序大小、平均負載等資訊。與其它命令相比,能檢視各項指標隨時間變化的情況。  
    <ul>
    	<li><span><span>runq-sz:執行佇列的長度(等待執行的程序數)。</span></span></li> <li><span><span><span>plist-sz:程序列表中程序(processes)和執行緒(threads)的數量。</span></span></span></li> <li><span><span><span><span>ldavg-1:最後 1 分鐘的系統平均負載。</span></span></span></span></li> <li><span><span><span><span><span>ldavg-5:過去 5 分鐘的系統平均負載。</span></span></span></span></span></li> <li><span><span><span><span><span><span>ldavg-15:過去 15 分鐘的系統平均負載。</span></span></span></span></span></span></li> </ul> </li> 

 

  • 檢視記憶體負載
    用法:  
    sar -r 1 3

    示例輸出:  
    sar -r 1 3
    Linux 3.10.0-123.9.3.el7.x86_64 (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)的百分比。

 

  • 檢視頁面交換髮生狀況
    用法:  
    sar -W 1 3

    示例輸出:  
    sar -W 1 3
    Linux 3.10.0-123.9.3.el7.x86_64 (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 page)數量。

 

  • 其它常見 sar 引數說明(區分大小寫)  
    <ul>
    	<li><span><span>-A 彙總所有的報告</span></span></li> <li><span><span><span>-a 報告檔案讀寫使用情況</span></span></span></li> <li><span><span><span><span>-B 報告附加的快取的使用情況</span></span></span></span></li> <li><span><span><span><span><span>-b 報告快取的使用情況</span></span></span></span></span></li> <li><span><span><span><span><span><span>-c 報告系統呼叫的使用情況</span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span>-d 報告磁碟的使用情況</span></span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span><span>-g 報告串列埠的使用情況</span></span></span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span><span><span>-h 報告關於buffer使用的統計資料</span></span></span></span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span><span><span><span>-m 報告IPC訊息佇列和訊號量的使用情況</span></span></span></span></span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span><span><span><span><span>-n 報告命名cache的使用情況</span></span></span></span></span></span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span><span><span><span><span><span>-p 報告調頁活動的使用情況</span></span></span></span></span></span></span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span><span><span><span><span><span><span>-q 報告執行佇列和交換佇列的平均長度</span></span></span></span></span></span></span></span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span><span><span><span><span><span><span><span>-R 報告程序的活動情況</span></span></span></span></span></span></span></span></span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span>-r 報告沒有使用的記憶體頁面和硬碟塊</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span>-u 報告CPU的利用率</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span>-v 報告程序、i節點、檔案和鎖表狀態</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span>-w 報告系統交換活動狀況</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span><span>-y 報告TTY裝置活動狀況</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></li> </ul> </li> 

 

使用 htop 檢視系統負載情況


htop 是 Linux 系統中的一個互動程序檢視器,可以讓使用者進行互動式操作,可橫向或縱向滾動瀏覽程序列表,支援滑鼠操作。使用者可以在安裝 htop 來監控伺服器的負載。 

Linux系統預設不帶有 htop 工具,需要手動安裝通過 yum install htop 等方法安裝後才能使用。安裝方法本文不再詳述。

安裝成功後,可以在命令列輸入 htop 來啟動 htop 監控工具。htop 啟動後的介面如下圖所示:

blob.png

返回結果左側顯示 CPU、記憶體、交換區 swap 的使用情況,右側顯示任務、負載、開機時間,下面的主體部分就是程序實時狀況,底端是 F1-F10 功能鍵。

相關快捷功能鍵的說明如下:

功能鍵 對應功能 說明
F1 Invoke htop Help 檢視htop幫助說明
F2 Htop Setup Menu htop 配置選單
F3 Search for a Process 搜尋程序
F4 Incremental process filtering 程序過濾器
F5 Tree View 顯示樹形結構
F6 Sort by a column 選擇排序方式
F7 Nice - (change priority) 可減少nice值,用於提高對應程序的優先順序
F8 Nice + (change priority) 可增加nice值,用於降低對應程序的優先順序
F9 Kill a Process 對程序傳遞訊號
F10 Quit htop 結束htop

在 htop 介面,使用者可以通過滑鼠點選相關程序、列、功能鍵,也可以通過上下鍵或 PgUP、PgDn  鍵選定想要的程序,左右鍵或 Home、 End 鍵移動欄位,常用的快捷鍵如下:

  • Space    標記/取消標記一個或多個程序。
  • s    選擇某一程序,按 s 後,用 strace 追蹤程序的系統呼叫。
  • l    顯示程序開啟的檔案。如果安裝了 lsof,按此鍵可以顯示程序所開啟的檔案。
  • M    按 Memory 使用排序。
  • P    按 CPU 使用排序。
  • T    按 Time+ 使用排序。
  • F    跟蹤程序: 如果排序順序引起選定的程序在列表上隨意移動,讓選定條跟隨該程序。這對監視一個程序非常有用。通過這種方式,使用者可以讓特定程序在螢幕上一直可見。使用方向鍵會停止該功能。
  • K    顯示/隱藏核心執行緒。
  • H    顯示/隱藏使用者執行緒。
  • Ctrl-L    重新整理。

滑鼠點選 Help 或者按 F1 ,可以顯示自帶幫助:

blob.png

滑鼠點選 Setup 或者按下 F2 可以進入 htop 配置頁面。例如最後一項的設定是調整 Columns(資料列)的顯示,用於自定義 htop 程序列表中可以看到哪些欄位的資料及資訊。

blob.png

滑鼠點選 Search 或者按下 F3  或者輸入 "/", 可以通過輸入程序名進行搜尋,例如搜尋 ssh 程序

blob.png

輸入 "t" 或按下 F5,顯示樹形結構,與 pstree 顯示效果類似,可以看到所有程式樹狀執行的結構。

blob.png

按下 F6 可以選擇依照哪一列來排序,最常用的排序內容就是 CPU 和 Memory。

blob.png