AIX 中 Paging Space 使用率过高的分析与解决

记录一下

参考:http://www.ibm.com/developerworks/cn/aix/library/au-cn-pagingspace/

AIX操作系统中Paging Space是很重要的设备,当系统中Paging Space使用率过高、系统内存不足时,
将影响系统的整体性能,甚至会造成系统的挂起。针对这种情况,通常可以靠增加Paging Space来加
以缓解;但是当Paging Space已经相当大,而Paging Space使用率仍旧居高不下时,则需要通过进一
步的分析来找出原因并加以解决。文中分析了几种Paging Space使用率持续增长直至过高的常见原因,
并给出了相应的解决方案,以确保Paging Space使用率被控制在安全的范围内。

1 Paging Space的创建原则

AIX中Paging Space大小确定的指导原则如下:

系统实际内存小于64MB, paging space= 2 * RAM ;
系统实际内存在 64MB to 256MB 之间, Page Space = RAM size + 16MB ;
系统实际内存大于 256MB , Page Space = 512 + ( RAM – 256 ) * 1.25 ;
当内存超过4GB时,则需要根据实际情况来定,一般可初始3GB, 然后观察paging space的使用情况,如果使用率超过70%, 则需要增加paging space 或把OS中的min_perm%,max_perm%和max_client%参数调小一点

此外在创建Paging Space时还应遵循以下原则以提高性能:

创建的数量应尽可能的多;
每个Paging Space的大小应该相同;
每个Paging Space应尽可能的分配在不同的硬盘上。
AIX中可以通过命令lsps -s查看Paging Space的使用情况。列Total Paging Space给出的是系统总的Paging Space空间大小,Percent Used则表示已被占用的Paging Space的百分比。

eg:

# lsps -s
Total Paging Space   Percent Used
16384MB               1%

命令lsps -a可以用来查看Paging Space的分布情况

# lsps -a
Page Space      Physical Volume   Volume Group    Size %Used Active  Auto  Type
hd6             hdisk0            rootvg       16384MB     1   yes   yes    lv
2 文件型内存对Paging Space使用率的影响

 

在AIX系统中,内存可以简单的分为两类:计算型内存和文件型内存。类似大量文件类操作,如压缩、
数据库的dump/load等操作会大量占用文件型内存。如果按照系统缺省的配置,文件型内存最多会占
用到内存总量的80%,由于文件型内存占用并不主动释放,从而可能造成内存资源的短缺及Paging Space
使用率过高。

命令topas可以用来查看文件型内存占用内存情况,在MEMORY一栏中的%Noncomp显示的是文件型内存的占用百分比。
Topas Monitor for host:    hostname                EVENTS/QUEUES    FILE/TTY
Fri Jul 31 13:15:39 2009   Interval:  2         Cswitch    1489  Readch  2896.8K
Syscall    7341  Writech   17338
Kernel    1.2   |#                           |  Reads       327  Rawin         0
User     18.0   |######                      |  Writes       13  Ttyout      373
Wait     13.4   |####                        |  Forks         0  Igets         0
Idle     67.5   |####################        |  Execs         0  Namei        33
Runqueue    1.5  Dirblk        0
Network  KBPS   I-Pack  O-Pack   KB-In  KB-Out  Waitqueue   0.0
en2       2.5      8.0     4.0     1.3     1.2
en0       1.1      2.0     2.0     0.4     0.7  PAGING           MEMORY
lo0       0.0      0.0     0.0     0.0     0.0  Faults      174  Real,MB    7808
Steals        0  % Comp     83.3
Disk    Busy%     KBPS     TPS KB-Read KB-Writ  PgspIn        0  % Noncomp   2.5
hdisk3   27.5   2924.0   322.0  2910.0    14.0  PgspOut       0  % Client    3.2
hdisk0    1.0      4.0     1.0     2.0     2.0  PageIn        1
hdisk1    0.5      2.0     0.5     0.0     2.0  PageOut       1  PAGING SPACE
dac0      0.0      0.0     0.0     0.0     0.0  Sios          2  Size,MB   16384
dac0-utm  0.0      0.0     0.0     0.0     0.0                   % Used      0.6
dac5      0.0   2924.0   322.0  2910.0    14.0  NFS (calls/sec)  % Free     99.3
dac5-utm  0.0      0.0     0.0     0.0     0.0  ServerV2       0
dac2      0.0      0.0     0.0     0.0     0.0  ClientV2       0   Press:
dac4      0.0      0.0     0.0     0.0     0.0  ServerV3       0   “h” for help
cd0       0.0      0.0     0.0     0.0     0.0  ClientV3       0   “q” to quit
dac4-utm  0.0      0.0     0.0     0.0     0.0
hdisk2    0.0      0.0     0.0     0.0     0.0
dac2-utm  0.0      0.0     0.0     0.0     0.0

Name            PID  CPU%  PgSp Owner
oracle       438598  22.1   7.2 oracle
oracle       741490   3.6   5.5 oracle
topas        975296   0.3   2.1 root
oracle       897480   0.0   4.2 oracle
hats_nim     225330   0.0   1.8 root
aioserve     242162   0.0   0.1 root
oracle       901544   0.0   4.2 oracle
gil           28972   0.0   0.1 root
aioserve     315456   0.0   0.1 root
aioserve     118860   0.0   0.1 root
aioserve     381290   0.0   0.1 root
aioserve     323656   0.0   0.1 root
hatsd        151846   0.0   8.2 root
oracle       188724   0.0   7.1 oracle
如果文件型内存所占比例很高,而Paging Space使用率居高不下时,可以通过降低minperm、maxperm的
参数值来进行调优,减少文件型内存可占用的份额。

在进行调整前,首先通过命令vmo -a/vmtune -a来查看目前的参数值;minperm及maxperm的缺省值分别
是30%和80%。

# 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% = 10
maxfree = 1088
maxperm = 192213
maxperm% = 10
maxpin = 1613727
maxpin% = 80
mbuf_heap_psize = 4096
memory_affinity = 1
memory_frames = 1998848
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 = 0
minfree = 960
minperm = 96106
minperm% = 5
nokilluid = 0
npskill = 32768
npsrpgmax = 262144
npsrpgmin = 196608
npsscrubmax = 262144
npsscrubmin = 196608
npswarn = 131072
num_spec_dataseg = 0
numpsblks = 4194304
page_steal_method = 0
pagecoloring = n/a
pinnable_frames = 637301
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 = 1
vm_modlist_threshold = -1
vmm_fork_policy = 1#
说明:

(1) minperm%
如果由文件页面占有的实际内存的百分比低于这个级别,则页面替换算法既替换文件页面也替换计算页面,而不管repage rate。
# vmo -a |grep minperm%
minperm% = 20

(2) maxperm%
如果由文件页面占有的实际内存的百分比高于这个级别,则页面替换算法仅替换文件页面。
# vmo -a |grep maxperm%
maxperm% = 80

(3) maxclient%
如果由文件页面占有的实际内存的百分比高于这个级别,则页面替换算法仅替换客户机页面。
# vmo -a |grep maxclient%
maxclient% = 80

这三个参数,可以根据内存总量大小,进行适度调节。计算型内存与文件型内存,在实际的应用中,
需要遵循以下一些原则(这些原则是自己归纳的):

1.使用的文件型内存百分比 + 使用的计算型内存百分比 < 100%

2.计算型内存中的pinned memory设置要合理,即sga大小要设置合理,要留一部份给OS,OS也需要pinned memory.当系统资源紧张时,OS的pinned memory具有最高的优先级.

3.保证系统非pinned 计算型 memory有一个合理的成长空间,这部份主要是给ORACLE PGA使用,当连接数增长过
快时,此内存的使用增长也相当的明显,而此增长很有可能会导致操作系统的交换。当系统的使用的文件型内存百分比 + 使用的计算型内存百分比 >= 100%,系统便开始产生交换,系统的PAGING SPACE会持续的增长,影响到产品库的安全。

恰当的设置OS内存参数,控制操作系统的交换,可以减少很多系统不稳定的情况发生。比如说操作系统执行重启命令都执行不了:

shutdown -Fr
当由文件页面占有的实际内存的百分比处于 minperm 和 maxperm 之间时,VMM
通常只替换文件页面,但是如果文件 页面的重新调页(repaging)率高于计算页面的重新调页率的话,计算页面也被替换。页面替换算法的主要意图是确保计算页面得到合理的待遇。例如,对 于可能会很快再次使用的程序文本页,顺序读取长的数据文件到内存中应该不会使它们丢失。对阈值和重新调页率使用页面替换算法可确保合理地对待这两种类型的 页面,但仍稍微偏向有利于计算页面的一方。
通过vmstat -v可以看到当前persistent或者client page的数目和百分比,可以作为系统调优的依据.
# vmstat -v
4079616 memory pages
3870685 lruable pages
601736 free pages
2 memory pools
535883 pinned pages
80.0 maxpin percentage
20.0 minperm percentage
80.0 maxperm percentage
66.2 numperm percentage
2565739 file pages
0.0 compressed percentage
0 compressed pages
66.7 numclient percentage
80.0 maxclient percentage
2583086 client pages
0 remote pageouts scheduled
28222 pending disk I/Os blocked with no pbuf
0 paging space I/Os blocked with no psbuf
2740 filesystem I/Os blocked with no fsbuf
0 client filesystem I/Os blocked with no fsbuf
106338 external pager filesystem I/Os blocked with no fsbuf

List-based LRU (page_steal_method)
在AIX 5.3, LRU算法可以用lists或者page frame. table,在AIX 5.3之前,只有page frame
table的算法, The list-based algorithm provides a list of pages to scan for
each type of segment. 下面是段类型的列表:

Working
Persistent
Client
Compressed

# vmo -a |grep page_steal_method
page_steal_method = 0
如果page_steal_method = 1, 将采用list-based LRU算法, 如果page_steal_method
parameter 为 0, 将采用physical-address-based scanning的方式.
page_steal_method参数值只有在bosboot and reboot后生效.
# vmo -L page_steal_method
NAME CUR DEF BOOT MIN MAX UNIT TYPE
DEPENDENCIES
——————————————————————————-
page_steal_method 0 0 0 0 1 boolean B
——————————————————————————-

strict_maxperm
缺省为0. 当strict_maxperm 设置成 1, places a hard limit on how much memory
is used for a persistent file cache by making the maxperm value be the
upper limit for this file cache. 当达到上线的时候least recently used
(LRU)将执行在persistent pages上.
# vmo -a |grep strict_maxperm
strict_maxperm = 0

Enhanced JFS file system cache 相关的参数: maxclient, strict_maxclient和lru_file_repage
Enhanced JFS file system cache使用client page来作为buffer
cache,通过maxclient%来控制page stealing. 如果strict_maxlient设置为0,
maxclient%将用来作为一个soft limit. 也就是说client
pages可以超过maxclient参数,如果超过这个值,只有client file page被stolen.
当lru_file_repage设置为1的时候,如果client pages的数目介于minperm和maxclient之间,
LRU算法将参考repage的计数. 最近没有被referenced的page将被stolen. If the value of the
file repage counter is higher than the value of the computational
repage counter, computational pages, which are the working storage, are
selected for replacement. If the value of the computational repage
counter exceeds the value of the file repage counter, file pages are
selected for replacement.
当lru_file_repage设置为0的时候, 如果client pages的数目大于minperm,将选择file pages被替换.如果小于minperm,任何没有被referenced的page将被替换.
注意:maxclient同样影响NFS client和compressed pages.
# vmo -a |grep lru_file_repage
lru_file_repage = 1
# vmo -a |grep strict_maxclient
strict_maxclient = 1

工程经验
内存调优主要集中在几个关键参数中,往往这几个关键参数就能很大地提高系统的内存使用性能. 这几个参数是minperm%, maxperm%, maxclient%和lru_file_repage.
原则:首先了解你的应用类型,是文件读写型还是数据库类型. 尽量保证你的应用运行所需要的数据充分地利用物理内存. 具体的工程Tips例子请参见内存调优的工程经验篇
3 应用程序内存泄露对Paging Space使用率的影响

应用程序的内存泄露也是造成Paging Space使用率不断增长的另一常见原因,此类情况的解决方法主要是找出内存泄露的应用,然后进行修正或安装补丁。

以下方法可用来找出发生内存泄露的应用:

该命令每m秒钟按降序列出前n个最耗内存进程。为了便于分析,可以将结果输出到文件中,然后对内容进行分析,从而找出内存泄露的应用。

下例中命令svmon -P -t 10 -i 5的结果被输出到文件svmonresult.txt中,该命令每5秒种输出一次最耗内存的前10个进程。
svmon -P -t 10 -i 5 > svmonresult.txt

找出发生内存泄露的应用后可自行进行修正或查找相关的补丁进行安装。

4 数据库参数配置对Paging Space使用率的影响

在装有数据库的系统环境中,数据库相关参数的设置不当也容易造成Paging Space的占用率过高

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>