使用 ps、vmstat、topas 等通用工具觀察 AIX 作業系統記憶體使用狀況

stevens0102發表於2010-08-19
ps、 vmstat、topas 在 AIX 作業系統中是任何使用者都可以使用的,而 sar 命令普通使用者預設情況下沒有執行許可權,需要超級使用者事先授權,我發現大部分系統管理員沒有把 sar 放開,建議 sar 至少應讓資料庫使用者或者主要應用使用者能夠使用,sar 在 HP-UX 和Linux 系統中是任何使用者都能使用的,sar 的歷史資料蒐集功能簡單有效。本文不會用到 sar, 當然不是為了證明 sar 是個廢物,只是就地取材的需要,在普通使用者下用不了 sar,但 ps、vmstat 和 topas 是一定能用的。另外一定要提到的是 svmon 命令,這是 AIX 下要進行更詳細的記憶體分析時用到的專用工具,一定要做個比較的話,Solaris 和 Linux 下有 pmap 命令。svmon 在 AIX 5L 中只能在超級使用者許可權下執行,在 AIX 6 下由於引入了 RBAC(role-based access control)機制,對 svmon 執行許可權可以進行授權,預設情況下普通使用者也能使用 。ps、vmstat、topas 和 svmon 的輸出資訊可以互相參照和應證。

好了,現在提一個問題,我如何知道我的 4C(4個CPU)4G(4GB記憶體)、8C8G、8C16G、8C32G 等諸如此類配置的p系列系統記憶體是夠用的,有沒有一招鮮的方法就盯一個指標就知道記憶體夠用,不是瓶頸?

老 實說,沒有這麼一個指標給你去用,但是廠家的銷售和某些固執的技術人員會很堅定地跟你說,就看 free 值(vmstat 輸出中一個欄位),只要它大於 1000 就行了,你問為什麼?他不會給你解釋,彷彿那是一個毋庸置疑的真理。我想 free 值 1000 是多少啊,1000 頁,每頁 4KB, 自由記憶體只要有 4MB 就行了,現在什麼執行程式不都得上 10M, 那些象 awk、grep、sort、cut 之類小巧玲瓏的程式除外。你想找一個樂於討論技術的專家來聊聊,這時你又被傳授一招,用 vmstat 命令去觀察是否有 page space in 和 page space out 動作發生。

我就想如果我的系統 free 值是 5000,連續監控兩天也沒有出現 page space in 和 page space out,難道我就能下結論說我的系統是一個好系統,不存在記憶體的困惱?下面給大家展示一個系統,這個系統上跑兩個獨立的應用,一個是 ATM 交換平臺應用,另一個是跨行卡交換平臺應用。兩個應用都有自己的資料庫例項,而且兩個資料庫例項也都在這同一個系統上,該系統硬體配置是 4C8G,作業系統識別的邏輯 CPU 是 8 個(因 SMT enabled and SMT_threads = 2)。

$ vmstat 5 3

System Configuration: lcpu=8 mem=7936MB

kthr    memory              page              faults        cpu
----- ----------- ------------------------ ------------ -----------
 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa
 1  0 1611619  8087   0   0   0   0    0   0  78 4070 777  1  1 98  0
 0  0 1611586  8079   0   0   0   0    0   0 114 8136 1131  4  3 93  0
 2  0 1612269  7354   0   0   0   0    0   0  87 12327 1311  5  3 93  0
$

$ lsps -a
Page Space      Physical Volume   Volume Group    Size %Used Active  Auto  Type
hd6             hdisk0            rootvg        8192MB     2   yes   yes    lv
$

$ topas
Topas Monitor for host:    JHAP001                           EVENTS/QUEUES    FILE/TTY
Fri Aug 20 16:12:51 2010   Interval:  2                      Cswitch    1421          Readch  2642.4K
                                                                                         Syscall   14800          Writech  140.2K
Kernel    4.8   |##                                                      |    Reads      2809          Rawin         0
User      6.4   |##                                                       |    Writes      612             Ttyout     2018
Wait      0.0   |#                                                          |    Forks       144              Igets         0
Idle     88.7   |#########################  |    Execs       143             Namei      3109
                                                                                         Runqueue    2.0         Dirblk        0
Network  KBPS   I-Pack  O-Pack   KB-In  KB-Out   Waitqueue   0.0
lo0      55.3    109.3   109.3    27.7    27.7
en0      22.0     45.9    48.4    10.2    11.8                            PAGING               MEMORY
en1       0.2      1.0     0.5     0.1     0.1                                   Faults    22667   Real,MB    7936
                                                                                                  Steals        0        % Comp     87.4
Disk    Busy%     KBPS     TPS KB-Read KB-Writ             PgspIn        0      % Noncomp  13.2
kpower28  0.4     37.9     9.5     0.0    37.9                           PgspOut       0    % Client   13.2
kpower27  0.4     35.9     1.0     0.0    35.9                           PageIn        0
hdisk62   0.4     33.9     0.5     0.0    33.9                             PageOut       8    PAGING SPACE
hdisk63   0.0     20.0     5.0     0.0    20.0                                   Sios          8  Size,MB    8192
hdisk50   0.4     18.0     4.5     0.0    18.0                                                          % Used      1.9
hdisk1    1.9     14.0     3.5     0.0    14.0                              NFS (calls/sec)  % Free     98.0
hdisk0    0.9     14.0     3.5     0.0    14.0                              ServerV2       0
kpower21  0.0     10.0     2.5     0.0    10.0                          ClientV2       0   Press:
hdisk56   0.0      6.0     1.5     0.0     6.0                               ServerV3       0   "h" for help
hdisk43   0.0      4.0     1.0     0.0     4.0                               ClientV3       0   "q" to quit
hdisk49   0.0      2.0     0.5     0.0     2.0
hdisk20   0.0      0.0     0.0     0.0     0.0
hdisk25   0.0      0.0     0.0     0.0     0.0

Name            PID  CPU%  PgSp Owner
sh           557172   0.5   0.5 switch
oninit       708922   0.2   0.6 informix
xmwlm        221660   0.2   1.2 root
etsReq_D     950746   0.1   1.8 switch
oninit       258106   0.1   0.7 informix

$ ps aux | wc -l
     425
$

$ ps aux | head -1; ps aux | sed -e "1d" | sort +5nr | more
USER         PID %CPU %MEM   SZ  RSS    TTY STAT    STIME  TIME COMMAND
patrol    962716  0.3  1.0 58420 55780      - A      Jul 04 1523:33 PatrolAgent -p
root      245760  0.0  0.0 28976 29124      - A      Jul 04 22:58 /usr/openv/netb
root      213244  0.0  0.0 30828 28092      - A      Jul 04  0:38 /usr/openv/netb
posb      774276  0.0  0.0 26004 25496      - A      Jul 05  2:01 Switch 1101 2
root     1229294  0.0  0.0 24256 24244      - A      Jul 28  0:19 storapid start
patrol   1077590  0.0  0.0 12848 12928      - A      Jul 04  8:08 bgscollect -I n
root      200976  0.0  0.0 13592 12400      - A      Jul 04  1:33 vmd
root      254230  0.0  0.0 14288 11000      - A      Jul 04  2:04 /usr/openv/volm
root      672240  0.0  0.0 9588 9752      - A      Jul 04  9:42 /usr/sbin/rsct/
informix  745512  0.0  0.0 11072 9584      - A      Jul 04  3:48 oninit
informix  475394  0.0  0.0 11068 9580      - A      Jul 04 14:58 oninit
informix  807204  0.1  0.0 10800 9556      - A      Jul 04 368:52 oninit
informix  258106  0.0  0.0 10740 9504      - A      Jul 04 93:33 oninit
informix  708922  0.1  0.0 10648 9412      - A      Jul 04 356:05 oninit
........................

$ vmstat -v
              2031616 memory pages
              1952961 lruable pages
                 6360 free pages
                    2 memory pools
               472656 pinned pages
                 80.0 maxpin percentage
                 10.0 minperm percentage
                 90.0 maxperm percentage
                 13.2 numperm percentage
               258434 file pages
                  0.0 compressed percentage
                    0 compressed pages
                 13.2 numclient percentage
                 90.0 maxclient percentage
               258429 client pages
                    0 remote pageouts scheduled
                    1 pending disk I/Os blocked with no pbuf
                  717 paging space I/Os blocked with no psbuf
                 2484 filesystem I/Os blocked with no fsbuf
                  417 client filesystem I/Os blocked with no fsbuf
                    0 external pager filesystem I/Os blocked with no fsbuf
                    0 Virtualized Partition Memory Page Faults
                 0.00 Time resolving virtualized partition memory page faults
$

$ vmstat -s
            622566993 total address trans. faults
            238405893 page ins
            417458254 page outs
                15227 paging space page ins
                26227 paging space page outs
                    0 total reclaims
           2874949233 zero filled pages faults
                43094 executable filled pages faults
            145148903 pages examined by clock
                 4968 revolutions of the clock hand
            469136694 pages freed by the clock
            428962821 backtracks
                    0 free frame. waits
                    0 extend XPT waits
              9083933 pending I/O waits
            655864382 start I/Os
             94687163 iodones
           4660499262 cpu context switches
            532343826 device interrupts
            824993972 software interrupts
           2335995821 decrementer interrupts
             40991343 mpc-sent interrupts
             40982373 mpc-received interrupts
              1045786 phantom interrupts
                    0 traps
          50214373791 syscalls
$

這是一臺 4C/8G 的 IBM p系列伺服器,作業系統是 AIX 5.3 ML06, vmstat 顯示的自由記憶體(free memory list)還有 7300 頁,相當於 29 MB(7300 X 4KB),vmstat -s 輸出顯示自由記憶體等待(free frame. waits)為 0,這說明雖然自由記憶體不多,但應用需要記憶體的時候都能得到滿足,也反映一個問題,你這個系統突然需要記憶體的時候不多。vmstat 還告訴我們在命令執行時刻不存在換頁空間(pageing space)操作,看 vmstat 顯示的活動虛存總數(avm)是 1612269 頁,相當於 6449MB(1612269 X 4KB),而系統實體記憶體有 7936MB, 所以活動虛存基本上可以全部被容納到實體記憶體中,如果系統配置的是 4G 記憶體,那就要重新做部署規劃了。再透過 lsps -a 觀察下交換空間的使用,用得不多,還是用了2%,即164MB,這樣大致看一下,這個交易系統在記憶體使用上還算過得去。系統管理員、執行人員以及第三方維 保工程師在該系統上確實也沒有耗費過多的精力,客戶使用自助裝置也能得到及時的響應。但假如你問該系統記憶體容量(capacity)如何這麼個問題,就得 想想了,系統雖然執行還算可以,質量要求是無限的,你要考慮類似容錯那樣的場景,假若執行人員開啟一個大的日誌檔案,或者應用分析人員在系統上執行一個復 雜的歷史資料查詢,都有可能引發意想不到的結果,一年 365 天週而復始的執行,說不上哪天或者哪段時間就碰上這種事。看看 topas 顯示的記憶體(memory)使用情況,計算記憶體(computational pages)佔了 87.4%, 非計算記憶體(file pages)佔用了 13.2%.換算一下計算記憶體用掉 6936MB, 檔案記憶體用掉 1048MB.計算記憶體與 avm 值比較接近,有 avm 比計算記憶體量大很多的系統,那樣換頁空間會大量使用。看 vmstat -v 輸出中的 numperm 值(就是非計算記憶體佔比)是 13.2%, 它介於 minperm(AIX 5.3 設為 10%)和 maxperm(AIX 5.3 設為 90%)之間,當自由記憶體不足的時候(譬如你開啟一份 800 MB 的日誌檔案來回瀏覽或者 unload 一個 2GB 的明細檔案做模式匹配),偷頁程式(在 AIX 上程式名叫 lrud)會在非計算記憶體那 1048MB 空間中去回收頁面。如果計算記憶體佔用比例提高到 90% 以上,現在已經 87% 了,所以這並非不可能,那麼 numperm 一定不會超過 minperm, 這個時候記憶體不足就可能到計算記憶體中去回收頁面,引發換頁空間的操作。我想說的是計算記憶體使用量接近 90%,這對於一個 7X24 小時執行的系統應該引起警覺,增加 8G 記憶體,把計算記憶體使用量降到 50%,這個投入是非常值得的。

大 家會注意到 topas 輸出中計算記憶體與非計算記憶體之和超過了 100%,估計有部分重複量(共享庫、共享記憶體、執行映像之類)算到了相應的記憶體中,完全避免很難,超過一點點屬正常。另外要提醒的是計算記憶體加上非計算 記憶體之和並非一定要等於或接近 100%,因為自由空閒記憶體不屬於上述任何一類記憶體。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23488160/viewspace-676315/,如需轉載,請註明出處,否則將追究法律責任。

相關文章