4.6. Red Hat Enterprise Linux 的特定資訊

作業系統的虛擬記憶體對分頁索求無度。由於這複雜性與生俱來,所以在 Red Hat Enterprise Linux 中監控記憶體相關的資源,會讓人混淆。因此,我們建議您從一些簡單直接的工具開始,參照本節的資訊做一遍。

free 指令會顯示一張簡明(有時過於陽春)的報告,讓您對記憶體與置換的使用率有個初步的了解。以下是個範例:

             total       used       free     shared    buffers     cached
Mem:       1288720     361448     927272          0      27844     187632
-/+ buffers/cache:     145972    1142748
Swap:       522104          0     522104
      

我們可以看到,這系統有 1.2 GB 的記憶體,實際使用的只有 350 MB。有這麼多記憶體閒置不用,您可以預期 500 MB 的置換空間根本沒派上用場。

請跟這個例子比較看看:

             total       used       free     shared    buffers     cached
Mem:        255088     246604       8484          0       6492     111320
-/+ buffers/cache:     128792     126296
Swap:       530136     111308     418828
      

這系統的記憶體為 256 MB,大部分都在使用中,只剩下 8 MB 的空間可用;而 512 MB 的置換空間中,有 100 MB 正在使用中。雖然這系統的記憶體少於之前的系統,但是不是因此而造成效能問題,那還得進一步的研究。

雖然 vmstat 的結果看起來比 free 神祕,但它顯示了更多記憶體使用率的資訊。底下是 vmstat 1 10 的執行結果:

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 2  0  0 111304   9728   7036 107204   0   0     6    10  120    24  10   2  89
 2  0  0 111304   9728   7036 107204   0   0     0     0  526  1653  96   4   0
 1  0  0 111304   9616   7036 107204   0   0     0     0  552  2219  94   5   1
 1  0  0 111304   9616   7036 107204   0   0     0     0  624   699  98   2   0
 2  0  0 111304   9616   7052 107204   0   0     0    48  603  1466  95   5   0
 3  0  0 111304   9620   7052 107204   0   0     0     0  768   932  90   4   6
 3  0  0 111304   9440   7076 107360  92   0   244     0  820  1230  85   9   6
 2  0  0 111304   9276   7076 107368   0   0     0     0  832  1060  87   6   7
 3  0  0 111304   9624   7092 107372   0   0    16     0  813  1655  93   5   2
 2  0  2 111304   9624   7108 107372   0   0     0   972 1189  1165  68   9  23
      

根據這十秒間的採樣數據,可用記憶體(free 欄位)稍有變動,與置換相關的 I/O(siso 欄位)並不多,所以整體來說,這部電腦運作順暢。不過,以目前的記憶體使用率,它還能支援多少的額外工作,那就值得懷疑了。

當研究記憶體相關的問題時,了解 Red Hat Enterprise Linux 的虛擬記憶體子系統是如何使用系統記憶體,是絕對必要的工作。sar 指令可以用更深入的方式,檢視系統效能。

sar -r 指令,我們可以更進一步檢視記憶體與置換空間的使用率:

Linux 2.4.20-1.1931.2.231.2.10.ent (pigdog.example.com)      07/22/2003

12:00:01 AM kbmemfree kbmemused  %memused kbmemshrd kbbuffers  kbcached
12:10:00 AM    240468   1048252     81.34         0    133724    485772
12:20:00 AM    240508   1048212     81.34         0    134172    485600
…
08:40:00 PM    934132    354588     27.51         0     26080    185364
Average:       324346    964374     74.83         0     96072    467559
      

kbmemfreekbmemused 欄位分別顯示記憶體的未使用與已使用空間,後面跟著的是已使用空間的百分比(%memused 欄位)。kbbufferskbcached 欄位分別顯示緩衝區與系統全域的資料快取量,單位為 KB。

使用 2.4 Linux 核心的系統(例如 Red Hat Enterprise Linux),kbmemshrd 欄位一律為零。

以上報表的每一行都為了列印方便而被裁切。底下是之前未顯示的部份,我們在最左邊加上了時間標頭,以方便閱讀:

12:00:01 AM   kbswpfree kbswpused  %swpused
12:10:00 AM      522104         0      0.00
12:20:00 AM      522104         0      0.00
…
08:40:00 PM      522104         0      0.00
Average:         522104         0      0.00
      

以置換空間的使用率來說,kbswpfreekbswpused 欄位分別顯示未使用與已使用的置換空間,單位為 KB;其後的 %swpused 欄位以百分比顯示已使用的置換空間。

要更進一步知道置換空間的執行資訊,請使用 sar -W 指令。以下是執行範例:

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM  pswpin/s pswpout/s
12:10:01 AM      0.15      2.56
12:20:00 AM      0.00      0.00
…
03:30:01 PM      0.42      2.56
Average:         0.11      0.37
      

從這表上我們可以發現,平均來說,寫入置換空間的分頁(pswpin/s)只有讀取(pswpout/s)的三分之一。

要更進一步了解分頁的使用狀況,請使用 sar -B 選項:

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM  pgpgin/s pgpgout/s  activepg  inadtypg  inaclnpg  inatarpg
12:10:00 AM      0.03      8.61    195393     20654     30352     49279
12:20:00 AM      0.01      7.51    195385     20655     30336     49275
…
08:40:00 PM      0.00      7.79     71236      1371      6760     15873
Average:       201.54    201.54    169367     18999     35146     44702
      

從這張表,我們可以知道每秒有多少分頁從磁碟讀入(pgpgin/s),又有多少分頁從記憶體寫進磁碟(pgpgout/s)。這些數據就像晴雨計一樣,顯示整體的虛擬記憶體活動。

然而,您可以看看其他欄位,以獲取更多資訊。Red Hat Enterprise Linux 核心把所有的分頁標示為作用中(active)與非作用中(inactive)。正如其名稱所暗示的,前者是正在使用中的分頁(例如程序或緩衝區使用的分頁);而後者則正好相反。這範例顯示正在運作中的分頁(activepg)平均為 660 MB[1]

剩下的欄位都跟非作用中的分頁有關 — 不管是因為什麼理由,這種分頁最近都沒有被使用。inadtypg 欄位指出有多少非作用的分頁已經被標示為「骯髒的(dirty)」(被修改過的),需要被寫回磁碟中。另一方面,inaclnpg 欄位指的則是「乾淨的(clean)」為作用中分頁,不需要被寫回磁碟中。

inatarpg 欄位則是非作用清單的所需大小。這個值是由 Linux 核心所計算,讓非作用的清單能保持一定的大小,作為分頁替換用的空間。

如果要更深入了解分頁的狀態(尤其是分頁的改變狀態),請使用 sar -R 指令。底下是範例報表:

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM   frmpg/s   shmpg/s   bufpg/s   campg/s
12:10:00 AM     -0.10      0.00      0.12     -0.07
12:20:00 AM      0.02      0.00      0.19     -0.07
…
08:50:01 PM     -3.19      0.00      0.46      0.81
Average:         0.01      0.00     -0.00     -0.00
      

這份 sar 報表的數據非常獨特,因為有正有負,也可能為零。當這值為正,表示此類分頁的變化率處於增加的狀態;如果為負,表示變化率正在減少。如果這個值為零,那表示這類分頁並不增加,也不減少。

在這例子中,最後的取樣顯示大約每秒增加三個未使用分頁(frmpg/s);每秒幾乎增加一個分頁快取(campg/s)。而緩衝區所使用的分頁(bufpg/s)大約是每兩秒增加一個;共享記憶體分頁(shmpg/s)則沒有任何變化。

[1]

在 x86 系統中,Red Hat Enterprise Linux 使用的單位分頁大小為 4,096 位元組。其他電腦架構所使用分頁大小並不盡相同。