Linux 效能分析-vmstat

    要瞭解 Linux/UNIX 的記憶體使用狀況,可以用 vmstat 工具,以下詳述這個工具的用法:

    指令用法

    #>vmstat 2

    Tip: 每2秒蒐集一次資訊

    案例一:CPU & RAM 負載低
    [root@deki ~]# vmstat 2
    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     0  0     60 163016 252108 363996    0    0     4   172   23   16  2  3 94  0  0
     0  0     60 163016 252108 363996    0    0     0    60 1025  248  0  0 100  0  0
     0  0     60 163016 252108 364000    0    0     0     0 1073  416  3  4 94  0  0
     0  0     60 163016 252108 364000    0    0     0     0 1042  248  0  0 100  0  0
     0  0     60 163016 252108 364000    0    0     0    54 1030  249  0  0 99  0  0
     0  0     60 163016 252108 364000    0    0     0     0 1032  247  0  1 100  0  0
     0  0     60 163016 252108 364000    0    0     0     0 1035  228  0  0 100  0  0
     0  0     60 162892 252108 364000    0    0     0    12 1041  516 12 68 21  0  0
     0  0     60 162892 252108 364000    0    0     0     0 1020  240  0  0 100  0  0
     0  0     60 162892 252108 364000    0    0     0    42 1024  249  0  0 100  0  0
     0  0     60 162892 252108 364000    0    0     0     0 1035  248  0  0 100  0  0
     0  0     60 162892 252108 364000    0    0     0     2 1029  267  0  1 99  0  0
     0  0     60 163016 252108 364000    0    0     0     0 1018  219  0  0 100  0  0
     0  0     60 163016 252108 364000    0    0     0    12 1026  603  7  8 85  0  0
     1  0     60 163016 252108 364004    0    0     0     0 1044  270  0  0 100  0  0
     0  0     60 163016 252108 364004    0    0     0     0 1025  267  0  0 100  0  0
     7  0     60 162272 252108 364004    0    0     0    54 1026 1127  8 14 78  0  0
    
    
    案例二:CPU 負載高,RAM 負載低
    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
    13  0      0 204372  46688 3261856    0    0     0  3146 2024 5151 18 82  0  0  0
    15  0      0 204248  46708 3261900    0    0     4  3920 1919 5839 17 83  0  0  0
    11  1      0 204248  46716 3261956    0    0     6  2940 1868 4863 19 81  0  0  0
    16  1      0 209212  46736 3262004    0    0     4  5142 2194 5447 17 83  0  0  0
     8  0      0 210332  46776 3262248    0    0   122  3002 2267 5818 15 85  0  0  0
     6  0      0 210704  46808 3262300    0    0     0  3090 1982 4658 17 83  0  0  0
    11  1      0 211076  46872 3262384    0    0     2  2986 2102 4890 17 83  0  0  0
     9  0      0 210952  46884 3262408    0    0     2     0 1815 4891 18 82  0  0  0
     6  0      0 210952  46896 3262440    0    0     0  2978 1588 4877 23 77  0  0  0
     3  0      0 210828  46920 3262468    0    0     0  2968 1859 4424 18 82  0  0  0
     4  0      0 211324  46932 3262580    0    0     0     0 2182 5391 16 84  0  0  0
     4  0      0 211324  46976 3262000    0    0     0  2992 1638 3973 17 83  0  0  0
     3  0      0 211324  47008 3262060    0    0     0  5190 1838 4707 19 81  0  0  0
     9  0      0 211324  47008 3262072    0    0     0     0 1688 5711 39 61  0  0  0
     7  0      0 208968  47020 3262072    0    0     0  2974 1389 4076 24 76  0  0  0
     2  0      0 206364  47020 3262080    0    0     0     0 1053 3283 40 60  0  0  0
    11  0      0 204628  47028 3262080    0    0     0  3020 1995 6525 32 68  0  0  0
     4  0      0 199668  47044 3262084    0    0     0  2946 1813 4977 21 79  0  0  0
     4  0      0 193344  47064 3262120    0    0     0  2962 2455 6091 15 85  0  0  0
     5  0      0 191608  47092 3262316    0    0     0  2980 2255 5560 18 82  0  0  0
    10  0      0 188632  47132 3262248    0    0     0  2960 2591 6128 15 85  0  0  0
     5  0      0 186524  47168 3262448    0    0     0  3026 2210 5305 19 81  0  0  0
     3  0      0 186276  47192 3262328    0    0     0     4 1919 4915 24 76  0  0  0
     4  0      0 186028  47216 3262372    0    0     0  2994 1878 4399 19 81  0  0  0
     5  0      0 185780  47244 3262412    0    0     0  2970 2001 4915 18 82  0  0  0
     5  0      0 185532  47276 3262400    0    0     0  3128 2159 5427 16 84  0  0  0
     3  0      0 185532  47284 3262372    0    0     0     0 2173 5393 16 84  0  0  0
     3  0      0 185408  47320 3262396    0    0     0  2966 2247 5286 15 85  0  0  0
     4  0      0 185284  47340 3262464    0    0     0  2958 2237 5438 15 85  0  0  0
    
    案例三:連接 storage 與 SAN switch 的光纖線發生異常,時好時壞。
    • 問題:DB 效能突然變差
    • 狀況分析:
      1. Linux 的 top 指令顯示 Load Average 的值很容易高於 15 以上甚至更高。
      2. 檢視 dmesg 與 messages 無任何硬體異常訊息記錄。
      3. 幾乎所有的應用程式開始連線後,整個系統就出現超載狀況。
      4. 分析 Memory, 無 Disk Swapping 現象。
      5. 分析 CPU,仍有許多 Idle 現象。
      6. 檢視 vmstat 輸出資訊如下
    CPU - wa 始終大於 0 甚至更高
    IO - bi, bo  常有兩者都是 0,bi 偶爾會有高數值出現
    
    NOTE: 當系統有 I/O 行為時,正常狀態 bi 或 bo 應該都是連續有數值,不應該會是 0 
    
    • 原因分析:透過 vmstat 資訊,當系統有 I/O 行為時,正常狀態的 bi 或 bo 應該是連續有數值,不應該出現 0。

     

    Tips:

    r - 執行中或等待執行的程序數量
    b - 未中斷的休眠中程序數量,例如等待 IO,或正在作 Swaping
    swpd - 目前已使用的虛擬記憶(KB)
    free - 目前尚未被使用的實體記憶體(KB)
    buff - 目前在暫存區用於讀/寫操作的實體記憶體(KB)
    cache - 目前對應程序位址空間的實體記憶體(KB)
    si - 從 swap disk 讀取到 RAM(KB)
    so - 從 RAM 寫入 swap disk(KB)
    bi - 從檔案系統或 swap disk 讀取的分頁區塊
    bo - 從 RAM 寫到 swap disk 的分頁區塊

    CPU:
    us - User 佔用 CPU %
    sy - System 佔用 CPU %
    id - Idle 閒置 CPU %
    wa - 因為 I/O Waiting CPU %
    st - 虛擬機佔用 CPU %  (kernel 2.6.1 以後才支援)

    結果分析

    1. r 值若經常大於 1 甚至更大的數字,且 id 常小於 40%,表示 CPU 負荷過重。
    2. 當主程序正在運行時,有較少的 free 是好事,這表示 cache 使用更有效率,除非是有不斷的寫入 swap disk (so,bo)。
    3. cache 值如果較大,且 bi 值小,表示檔案系統效率好。
    4. 如果 swapd 數值大於 0,但 si, so 都顯示 0,此時系統效能還是正常的。
    5. 如果 bi, bo 出現較大的數值,但 si, so 卻維持數值 0,表示系統 IO 負載過重,要檢查檔案系統或硬碟有無異常。
    6. 如果 bi, bo 與 si, so 同時呈現較大的數值,表示記憶體 swapping 頻繁,RAM 太小。
    7. kswapd 程序服務是負責確保閒置的記憶體可被釋放,每次啟動掃描會嘗試釋放 32 個 pages,並且一直在重複這個程序,直到閒置記憶體的數值高於 pages_high(核心參數)。
    8. pdflush 程序服務是將記憶體中的內容與檔案系統進行同步操作,確保記憶體資料寫到硬碟。
    9. bi 或 bo 出現 0 的次數太過頻繁,除非系統處於閒置狀態,否則應該檢查 I/O 方面的硬體裝置,例如硬碟、storage、HBA 卡甚至是光纖線。
    案例四: NetApp storage 發生 IO bottleneck
    • 問題描述: 某資料庫在特定時段,AP 發生 SQL 嚴重遲緩
    • 狀況分析:
      1. 已確認主機的 CPU、Memeory 資源足夠
      2. 已確認資料庫服務無異常日誌記錄與 AP 程式無異動
      3. 問題發生當下,以 nmon 檢查主機 IO,發現 Read 使用率持續 100%,但 IOPS 平均數值顯示非常低 (不到 100 KB)
      4. 以 vmstat 檢查 bi 與 bo,在有 IO 行為發生時,正常情況下,數值最高可達 數萬到10幾萬,但異常發生時,數值平均都維持在 100 - 200 或更低數值。
    標籤 (Edit tags)
    • No tags
    您必須 登入 才能發佈評論。
    Powered by MindTouch Core