ps、vmstat、topas 在 AIX 操作系統中是任何用戶(hù)都可以使用的,而 sar 命令普通用戶(hù)缺省情況下沒(méi)有執行權限,需要超級用戶(hù)事先授權,我發(fā)現大部分系統管理員沒(méi)有把 sar 放開(kāi),建議 sar 至少應讓數據庫用戶(hù)或者主要應用用戶(hù)能夠使用,sar 在 HP-UX 和Linux 系統中是任何用戶(hù)都能使用的,sar 的歷史數據搜集功能簡(jiǎn)單有效。本文不會(huì )用到 sar, 當然不是為了證明 sar 是個(gè)廢物,只是就地取材的需要,在普通用戶(hù)下用不了 sar,但 ps、vmstat 和 topas 是一定能用的。另外一定要提到的是 svmon 命令,這是 AIX 下要進(jìn)行更詳細的內存分析時(shí)用到的專(zhuān)用工具,一定要做個(gè)比較的話(huà),Solaris 和 Linux 下有 pmap 命令。svmon 在 AIX 5L 中只能在超級用戶(hù)權限下執行,在 AIX 6 下由于引入了 RBAC(role-based access control)機制,對 svmon 執行權限可以進(jìn)行授權,缺省情況下普通用戶(hù)也能使用 。ps、vmstat、topas 和 svmon 的輸出信息可以互相參照和應證。
好了,現在提一個(gè)問(wèn)題,我如何知道我的 4C(4個(gè)CPU)4G(4GB內存)、8C8G、8C16G、8C32G 等諸如此類(lèi)配置的p系列系統內存是夠用的,有沒(méi)有一招鮮的方法就盯一個(gè)指標就知道內存夠用,不是瓶頸?
老實(shí)說(shuō),沒(méi)有這么一個(gè)指標給你去用,但是廠(chǎng)家的銷(xiāo)售和某些固執的技術(shù)人員會(huì )很堅定地跟你說(shuō),就看 free 值(vmstat 輸出中一個(gè)字段),只要它大于 1000 就行了,你問(wèn)為什么?他不會(huì )給你解釋?zhuān)路鹉鞘且粋€(gè)毋庸置疑的真理。我想 free 值 1000 是多少啊,1000 頁(yè),每頁(yè) 4KB, 自由內存只要有 4MB 就行了,現在什么執行程序不都得上 10M, 那些象 awk、grep、sort、cut 之類(lèi)小巧玲瓏的程序除外。你想找一個(gè)樂(lè )于討論技術(shù)的專(zhuān)家來(lái)聊聊,這時(shí)你又被傳授一招,用 vmstat 命令去觀(guān)察是否有 page space in 和 page space out 動(dòng)作發(fā)生。
我就想如果我的系統 free 值是 5000,連續監控兩天也沒(méi)有出現 page space in 和 page space out,難道我就能下結論說(shuō)我的系統是一個(gè)好系統,不存在內存的困惱?下面給大家展示一個(gè)系統,這個(gè)系統上跑兩個(gè)獨立的應用,一個(gè)是 ATM 交換平臺應用,另一個(gè)是跨行卡交換平臺應用。兩個(gè)應用都有自己的數據庫實(shí)例,而且兩個(gè)數據庫實(shí)例也都在這同一個(gè)系統上,該系統硬件配置是 4C8G,操作系統識別的邏輯 CPU 是 8 個(gè)(因 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系列服務(wù)器,操作系統是 AIX 5.3 ML06, vmstat 顯示的自由內存(free memory list)還有 7300 頁(yè),相當于 29 MB(7300 X 4KB),vmstat -s 輸出顯示自由內存等待(free frame waits)為 0,這說(shuō)明雖然自由內存不多,但應用需要內存的時(shí)候都能得到滿(mǎn)足,也反映一個(gè)問(wèn)題,你這個(gè)系統突然需要內存的時(shí)候不多。vmstat 還告訴我們在命令執行時(shí)刻不存在換頁(yè)空間(pageing space)操作,看 vmstat 顯示的活動(dòng)虛存總數(avm)是 1612269 頁(yè),相當于 6449MB(1612269 X 4KB),而系統物理內存有 7936MB, 所以活動(dòng)虛存基本上可以全部被容納到物理內存中,如果系統配置的是 4G 內存,那就要重新做部署規劃了。再通過(guò) lsps -a 觀(guān)察下交換空間的使用,用得不多,還是用了2%,即164MB,這樣大致看一下,這個(gè)交易系統在內存使用上還算過(guò)得去。系統管理員、運行人員以及第三方維保工程師在該系統上確實(shí)也沒(méi)有耗費過(guò)多的精力,客戶(hù)使用自助設備也能得到及時(shí)的響應。但假如你問(wèn)該系統內存容量(capacity)如何這么個(gè)問(wèn)題,就得想想了,系統雖然運行還算可以,質(zhì)量要求是無(wú)限的,你要考慮類(lèi)似容錯那樣的場(chǎng)景,假若運行人員打開(kāi)一個(gè)大的日志文件,或者應用分析人員在系統上執行一個(gè)復雜的歷史數據查詢(xún),都有可能引發(fā)意想不到的結果,一年 365 天周而復始的運行,說(shuō)不上哪天或者哪段時(shí)間就碰上這種事??纯?topas 顯示的內存(memory)使用情況,計算內存(computational pages)占了 87.4%, 非計算內存(file pages)占用了 13.2%.換算一下計算內存用掉 6936MB, 文件內存用掉 1048MB.計算內存與 avm 值比較接近,有 avm 比計算內存量大很多的系統,那樣換頁(yè)空間會(huì )大量使用???vmstat -v 輸出中的 numperm 值(就是非計算內存占比)是 13.2%, 它介于 minperm(AIX 5.3 設為 10%)和 maxperm(AIX 5.3 設為 90%)之間,當自由內存不足的時(shí)候(譬如你打開(kāi)一份 800 MB 的日志文件來(lái)回瀏覽或者 unload 一個(gè) 2GB 的明細文件做模式匹配),偷頁(yè)進(jìn)程(在 AIX 上進(jìn)程名叫 lrud)會(huì )在非計算內存那 1048MB 空間中去回收頁(yè)面。如果計算內存占用比例提高到 90% 以上,現在已經(jīng) 87% 了,所以這并非不可能,那么 numperm 一定不會(huì )超過(guò) minperm, 這個(gè)時(shí)候內存不足就可能到計算內存中去回收頁(yè)面,引發(fā)換頁(yè)空間的操作。我想說(shuō)的是計算內存使用量接近 90%,這對于一個(gè) 7X24 小時(shí)運行的系統應該引起警覺(jué),增加 8G 內存,把計算內存使用量降到 50%,這個(gè)投入是非常值得的。
大家會(huì )注意到 topas 輸出中計算內存與非計算內存之和超過(guò)了 100%,估計有部分重復量(共享庫、共享內存、執行映像之類(lèi))算到了相應的內存中,完全避免很難,超過(guò)一點(diǎn)點(diǎn)屬正常。另外要提醒的是計算內存加上非計算內存之和并非一定要等于或接近 100%,因為自由空閑內存不屬于上述任何一類(lèi)內存。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。