暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

原创 eygle 2011-05-04
755

参考: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    
 
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: 
       
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        

Igets        
0

Idle    
67.5  
|####################       

Execs        

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       
%
Comp    
83.3

Disk   
Busy%    
KBPS    
TPS KB-Read KB-Writ 
PgspIn       
% Noncomp  
2.5

hdisk3  
27.5  
2924.0   322.0 
2910.0   
14.0 
PgspOut      
%
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      
PAGING SPACE

dac0     
0.0     
0.0    
0.0    
0.0    
0.0 
Sios         
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      
  Press:

dac4     
0.0     
0.0    
0.0    
0.0    
0.0 
ServerV3      
  "h" for help

cd0      
0.0     
0.0    
0.0    
0.0    
0.0 
ClientV3      
  "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的占用率过高


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论