1. 程式人生 > >AIX 中 Paging Space 使用率過高的分析與解決

AIX 中 Paging Space 使用率過高的分析與解決

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

author:skate
time : 2009/07/31


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的佔用率過高


---end----

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述