Linux Performance Monitoring

Linux Performance Monitoring

這篇文章主要介紹如何運用 Linux 的兩個常用的工具 (vmstat & iostat)

來得知目前 Linux 系統運作的效能,並且舉幾個例子說明如何解讀結果,

並且進一步分析是 CPU , memory or  disk 效能瓶頸

 

記憶體效能瓶頸  vmstat

首先介紹的工具是 vmstat ,該工具可以分析目前系統記憶體與CPU等的狀況。

$ vmstat    5

vmstat1

 

如何解讀 vmstat 的結果?

Procs

  • Procs > r : 有多少的 process 等待 CPU 執行。如果 r  的數值大於 # of CPU,則表示 CPU 效能瓶頸。
  • Procs > b: 有多少 process 等待 I/O (磁碟、網路、使用者輸入等)

Memory

  • swap > si:  how many blocks per second the operating system is swapping in from Disk.
  • swap > so:   how many blocks per second the operating system is swapping out to disk
  • 多半的情況下,這個值 si & so 皆為 0 ,如果超過 > 10 ,表示記憶體效能瓶頸,做很多的 page in/out 的動作。

 

io

  • io > bi : how many blocks per second are read in from (bi) disk
  • io > bo: written out to (bo) disk
  • 這個值可以佐證得知是否為 Disk I/O 的問題

 

system

  • in: the number of interrupts per second (in)
  • cs: the number of context switches per second (cs).

cpu

  • us:  CPU time spent running user application
  • sy:  CPU running system (kernel) code
  • id:  CPU idle
  • wa: CPU waiting for I/O

 

如何觀察 I/O 效能瓶頸 iostat

$ iostat -dx 5

iostat

 

這個結果主要觀察幾個重點,想像 CPU 是收銀機櫃台:

  • avgqu-sz: 平均有多少客戶在等待結帳
  • await: 平均每個客戶等待結帳的時間 (mili sec)
  • svctm: 平均每個櫃台處理每個客戶的時間 (不包含等待時間)
  • %util: 超過 80% 表示 I/O 效能瓶頸

 

接著讓我們看幾個個案

CPU Bound

vmstat_CPU

用 vmstat 觀察之後,如果是 CPU 忙碌的情況,通常會有下列特徵

  • r: # of process waiting for CPU > # of  CPU,有許多的 process 等待 CPU 執行
  • CPU > us:  CPU 主要花在 user application 的比率很高,這個例子中, 89%, 90%, 88%

補充說明什麼是 cs (context switch)

如果 CPU 要執行的資料沒有在記憶體中,那麼該 process 就會到 disk 讀取,並且等待 disk 讀取完成。這個動作就叫做  context switch。

 

iostat_cpu

另外看到 iostat的狀態,從上面這個圖中,通常我們會閱讀 %util , 這個例子中 47%  45% 不算很高的磁碟讀取,但是也表示有一定的 disk I/O 。如果該值達到 100%,就表示磁碟效能瓶頸。

 

I/O Bound 個案

這個例子,我們執行 vmstat 與iostat,比較明顯的值是 iostat 中 %util 超過 100%

補充說明的是:通常磁碟效能瓶頸多半會發生在 “讀取”  而非 “寫入”

因為讀取,通常是要讀完之後,process 才能夠繼續進行接下來的工作

而寫入,通常是可以延遲讀寫,或是批次等到一定時間或是量之後再寫入磁碟。

IOBound

 

 

Memory swap 的狀況

如果有 memory swap 的情況,最直接的方式就是看 Swap > si/so

這兩個值 si/so 如果 > 0 ,則表示有 memory swap 的狀況。

接著可以觀察:

  • b: # of process waiting for disk IO
  • System/cs:  context switch

因為磁碟讀取,會導致更多的 disk I/O wait 與 context switch 增加。

  • wa: CPU waiting on I/O

這個例子中,可以看到 22 -> 47 -> 77  ,I/O wait 越來越增加的趨勢。

 

vmstat_swap

 

 

Idle的情況

當電腦不忙碌的情況下,有幾個值會接近 0

procs > b:  接近 0,因為沒有 process 執行

procs > r:  接近 0,因為沒有 process 執行

cpu > us/sy: 接近 0,因為不管是 user mode or system mode 都沒有 cpu 使用

cpu > id: Idle 會接近 100。表示 CPU 100% idle

vmstat Idle

 

摘要

CPU

  • 如果 r 的數值大於 # of CPU,則表示 CPU 效能瓶頸。
    us: CPU time spent running user application
    sy: CPU running system (kernel) code

Memory

  • 多半的情況下,這個值 si & so 皆為 0

 

Disk IO

  • in: the number of interrupts per second (in)
    cs: the number of context switches per second (cs).
    io > bi : how many blocks per second are read in from (bi) disk
    io > bo: written out to (bo) disk
  • %util: 超過 80% 表示 I/O 效能瓶頸

Leave a Reply

Your email address will not be published. Required fields are marked *