分类:
2010-09-16 09:20:37
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 动作发生。
$ 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 还告诉我们在命令执行时刻不存在换页空间(page 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%,因为自由空闲内存不属于上述任何一类内存。
chinaunix网友2010-09-16 16:56:21
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com