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%,因为自由空闲内存不属于上述任何一类内存。
阅读(2962) | 评论(0) | 转发(0) |