Memory 性 能评估
1 、 VMM 的管理简介
首先,还是简单讲解一 下内存以及的 VMM 的 一点工作原理。
内存和交换空间一般都 是用页面来进行分配和管理的。在内存中存在两种类型的页面:计算页面(一般为可执行文件段中的页面)和文件页面(存储的数据文件的页面)。当我们执行程序 或者读入数据的时候,内存中的页面就逐渐被占用。当空闲的内存只剩 maxfree 的时候, vmm 的调页就被唤醒,通过调页算法,将内存中的页面转移到交换空间中。一直到空闲内存达到 maxfree ,才停止调页。
在这里,我们涉及到两个参数:
1) Minfree :最小空闲页链表尺寸。一旦低于该值,系统偷页以填充页链表,保证有足够的内存页面。偷页就是将不常 用的页面替换出去。
2) Maxfree :最大空闲页链表尺寸。一旦高于该值,系统停止偷页。
如果发现空闲列表不足,可以用下面的方法增加 minfree 参数
#vmo -o minfree=1000 -o maxfree=1008
Setting maxfree to 1008
Setting minfree to 1000
#vmo –o minfree=1000 –o maxfree=1008 –P # -P 参数使修改永久生效
一般情况下, minfree 和 maxfree 通过下面的公式得到:
maxfree=minmum(memory/128,128) ,minfree=maxfree-8
注意:在 AIX 5.2 之前的版本请使用 /usr/samples/kernel/vmtune 命令。
#/usr/samples/kernel/vmtune –f 1000 –F 1008
另外,关于内存的使用,我们还有两个经常碰到的参数需要关注:
Minperm :用户 I/O 文件访问的最小缓冲区页数
Maxperm :用户 I/O 文件访问的最大缓冲区页数
Minperm 和 maxperm 这两个参数的默认值分别为 20 %和 80 %。在这里主要与性能相关的是 maxperm 参数。 maxperm 参数指定了文件页面可以占用内存的上限,因为文件页面不主动释放,所以很容易造成内存的文件页面过 高的占用,导致其他的应用内存使用紧张。调整参数值的方法如下:
#vmo -o maxperm%=80 -o minperm%=20
Setting minperm% to 20
Setting maxperm% to 80
在 AIX 5.2 之前的版本请使用 /usr/samples/kernel/vmtune 命令。
#/usr/samples/kernel/vmtune -p 20 – P 80 将 min 和 max 的值分别设置为 20 %和 80 %。
查看当前的参数设置方法如下:
1 ) vmo –a 显示当前所有的参数设置
在 AIX 5.2 之前的版本请使用 # /usr/samples/kernel/vmtune 显示当前所有的参数设置
#vmo -a
cpu_scale_memp = 8
data_stagger_interval = 161
defps = 1
force_relalias_lite = 0
framesets = 2
htabscale = n/a
kernel_heap_psize = 4096
large_page_heap_size = 0
lgpg_regions = 0
lgpg_size = 0
low_ps_handling = 1
lru_file_repage = 1
lru_poll_interval = 10
lrubucket = 131072
maxclient% = 80
maxperm = 4587812
maxperm% = 80
maxpin = 4881650
maxpin% = 80
mbuf_heap_psize = 4096
memory_affinity = 1
memory_frames = 6029312
memplace_data = 2
memplace_mapped_file = 2
memplace_shm_anonymous = 2
memplace_shm_named = 2
memplace_stack = 2
memplace_text = 2
memplace_unmapped_file = 2
mempools = 4
IXDBA.NET技术社区minfree = 960
minperm = 1146952
minperm% = 20
nokilluid = 0
npskill = 49152
npsrpgmax = 393216
npsrpgmin = 294912
npsscrubmax = 393216
npsscrubmin = 294912
npswarn = 196608
num_spec_dataseg = 0
numpsblks = 6291456
page_steal_method = 0
pagecoloring = n/a
pinnable_frames = 5601758
pta_balance_threshold = n/a
relalias_percentage = 0
rpgclean = 0
rpgcontrol = 2
scrub = 0
scrubclean = 0
soft_min_lgpgs_vmpool = 0
spec_dataseg_int = 512
strict_maxclient = 1
strict_maxperm = 0
v_pinshm = 0
vm_modlist_threshold = -1
vmm_fork_policy = 1
vmm_mpsize_support = 1
2 ) vmstat -v
# vmstat -v
6029312 memory pages
5734766 lruable pages
2801540 free pages
4 memory pools
406918 pinned pages
80.0 maxpin percentage
20.0 minperm percentage
80.0 maxperm percentage
2.3 numperm percentage
135417 file pages
0.0 compressed percentage
0 compressed pages
0.0 numclient percentage
80.0 maxclient percentage
0 client pages
0 remote pageouts scheduled
312417 pending disk I/Os blocked with no pbuf
0 paging space I/Os blocked with no psbuf
2878 filesystem I/Os blocked with no fsbuf
0 client filesystem I/Os blocked with no fsbuf
0 external pager filesystem I/Os blocked with no fsbuf
显示 minperm 和 maxperm 和 numperm 的值。 numperm 值给出的是内存中文件页数。
系统调页的规则:
1) 如果 numperm>maxperm ,则只 调出文件页面。
2) 如果 numperm<minperm ,则同 时调出文件页面和计算页面。
3) 如果 minperm<numperm<maxperm ,则只调出文件页面,除非新调入的文件页面大于计算页面的总和。
如果系统在向调页空间调出页面,可能使因为内存中的文件页数低于 maxperm ,从而也调出了部分的计算页面 以达到 maxfree 的要求。在这种情况下,可以考虑把 maxperm 降低到低于 numperm 的某个值,从而阻止计算页面的调出。在 5.2 ML4 以后的版本中,为了防止计算页面被调出,可以采用另外一个方法, 就是设置参数 lru_file_repage=0 。将该参数设为 0 ,则告诉 vmm 在进行页面替换的时候,优先替换文件页面。
maxclient 通常应该设置为一个小于或者等于 maxperm 的值。
增强 JFS 文件系统为它的缓冲区高速缓存使用客户机文件,这不受 maxperm 和 minperm 的影响。为了在限制增强 JFS 文件系统使用高速缓存,可以指定 maxclient 的值,避免在它进行页面 替换的时候,替换其他类型的页。
2 、使用 vmstat 确定内存的使用情况
主要检查 vmstat 输出的 memory 和 pages 列和 faults 列。详细的说明见前一节 cpu 评估说明。
3 、 svmon 命令
# svmon -G -i 2 2
size inuse free pin virtual
memory 2097136 236845 1860291 152150 194943
pg space 1048576 960
work pers clnt lpage
pin 151904 246 0 0
in use 194960 41885 0 0
size inuse free pin virtual
memory 2097136 236853 1860283 152150 194947
pg space 1048576 960
work pers clnt lpage
pin 151904 246 0 0
in use 194964 41889 0 0
memory 段
¨ size 物理内存总页数。 4KB/ 页
¨ inuse 物理内存中正在使用的内存页面数。包含活动进程和已经终止的进程的持久 文件页面。
¨ free 空闲列表中的页面数量
¨ pin 锁定在内存中的页面数量(锁定的意思就是不能被替换出去)
¨ virtual
pg space 段
¨ size 调页空间总大小
¨ inuse 已经分配页的总数,也就是已经使用的调页空间页数
pin 段
¨ work 物理内存中的工作页面数
¨ pers 物理内存中的持久页面数
¨ clnt 物理内存中的客户机页面数(客户机页面就是一个远程文件页面)
inuse 段
¨ work 物理内存中的工作页面数
¨ pers 物理内存中的持久页面数
¨ clnt 物理内存中的客户机页面数(客户机页面就是一个远程文件页面)
3 、 ps 命令显示当前运行的进程状态信息。
运行下列命令,显示内 存占用前 10 位的 进程。
# ps gv |sort +6b -nr |head -10
2490538 - A 191:56 0 11840 32748 xx 45762 20924 0.1 0.0 ora_j00
2039970 - A 592:59 11 11728 32648 xx 45762 20924 0.3 0.0 ora_j00
2588922 - A 1118:31 22 11712 32632 xx 45762 20924 0.6 0.0 ora_j0
2523168 - A 305:01 1 11688 32608 xx 45762 20924 0.2 0.0 ora_j00
2474214 - A 0:01 0 11588 32512 xx 45762 20924 0.1 0.0 ora_j00
2007282 - A 0:01 0 10384 31308 xx 45762 20924 0.0 0.0 ora_j00
508120 - A 32:58 662 9344 27164 xx 45762 20924 0.0 0.0 ora_dbw
1351908 - A 0:02 1 5668 26560 xx 45762 20924 0.0 0.0 oracleo
3801250 - A 203:22 0 5648 26556 xx 45762 20924 0.1 0.0 oracleo
4 、内 存的调整
具体调整需要结合系统运行的应用程序对症下药,如调整 minperm/maxperm 将改变内存与 PAGING SPACE 之间的交换算法, 调整 minpgahead/maxpgahead 将改变内存块请求机制,调整 minfree/maxfree 将改变内存紧张时的内存清理刷新机制,等等。如果数据库使用裸设备,并且没有太多其他的应用,因为 裸设备不需要文件系统的缓存,所以可以降低 minperm , maxperm , maxclient 的默认值,降低操作系统对内存的不必要的占用。
案例:
计费数据库数据库响应 变慢,内存 16G ,裸设 备,却存在很多的 PI,PO 情况。
在检查与内存相关的系统参数,发现 如下问题:
minperm% = 20 , maxperm% = 80 , maxclient% = 80
说明:以上三个参数为 系统缺省配置,其表示,使用文件系统时,最多可使用 80% * 16G=10.8G ,用于缓存所访问的文件。
结论:由于以上参数采 用系统缺省配置,文件系统缓存最大可以达到 10.8G , 在执行大量的文件 cp 操作后,系统的可用内存量迅速下降,在 其后的计费过程中,由于大量 page in/page out 操作引起系统严重性能瓶颈。
优化:
将 maxperm% = 30 , maxclient% = 30
#vmo –o maxperm%=30 –P
#vmo –o maxclient%=30 –P
5.2 以前 版本
/usr/samples/kernel/vmtune –p 20 –P 30
/usr/samples/kernel/vmtune –t 30