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


  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 。

此外在創建Paging Space時還應遵循以下原則以提高性能:

  • 創建的數量應盡可能的多;
  • 每個Paging Space的大小應該相同;
  • 每個Paging Space應盡可能的分配在不同的硬盤上。

AIX中可以通過命令lsps -s查看Paging Space的使用情況。列Total Paging Space給出的是系統總的Paging Space空間大小,Percent Used則表示已被占用的Paging Space的百分比。

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


2 文件型內存對Paging Space使用率的影響

在AIX系統中,內存可以簡單的分為兩類:計算型內存和文件型內存。類似大量文件類操作,如壓縮、數據庫的dump/load等操作會大量占用文件型內存。如果按照系統缺省的配置,文件型內存最多會占用到內存總量的80%,由於文件型內存占用並不主動釋放,從而可能造成內存資源的短缺及Paging Space使用率過高。

命令topas可以用來查看文件型內存占用內存情況,在MEMORY一欄中的%Noncomp顯示的是文件型內存的占用百分比。

如果文件型內存所占比例很高,而Paging Space使用率居高不下時,可以通過降低minperm、maxperm的參數值來進行調優,減少文件型內存可占用的份額。

在進行調整前,首先通過命令vmo -a/vmtune -a來查看目前的參數值;minperm及maxperm的缺省值分別是30%和80%。

隨后根據當前的值來確定minperm、maxperm新的參數值,並通過命令vmo 及參數p和P來進行設定。如需將minperm、maxperm的值分別設為15%和30%可用命令vmo -p 15 -P 30來實現。

因為參數maxperm充當的是軟限制,所以文件型內存的占用率依舊可以超過maxperm的設定值。如果需要進行強制限制,則需要將參數strict_maxperm的值設為1,該參數的缺省值為0,但此方法需謹慎使用。


3 應用程序內存泄露對Paging Space使用率的影響

應用程序的內存泄露也是造成Paging Space使用率不斷增長的另一常見原因,此類情況的解決方法主要是找出內存泄露的應用,然后進行修正或安裝補丁。

以下方法可用來找出發生內存泄露的應用:

該命令每m秒鍾按降序列出前n個最耗內存進程。為了便於分析,可以將結果輸出到文件中,然后對內容進行分析,從而找出內存泄露的應用。

下例中命令svmon -P -t 10 -i 5的結果被輸出到文件svmonresult.txt中,該命令每5秒種輸出一次最耗內存的前10個進程。

找出發生內存泄露的應用后可自行進行修正或查找相關的補丁進行安裝。


4 數據庫參數配置對Paging Space使用率的影響

在裝有數據庫的系統環境中,數據庫相關參數的設置不當也容易造成Paging Space的占用率過高。以DB2為例,因為 DB2 使用自己的緩沖池進行數據緩存,所以其所能占用的內存量不受參數maxperm的控制,而是由自身的參數值來決定。數據庫占用的內存過多並且不及時釋放的話同樣會造成Paging Space使用率的持續增長乃至耗盡,本節中采用DB2的設置為例來對此類情況進行說明。

就Paging Space使用率而言,DB2的相關參數中需要特別關注的有DB2MEMDISCLAIM、DB2MEMMAXFREE、NUM_POOLAGENTS、 ESTORE_SEG_SZ及NUM_ESTORE_SEGS。其中DB2MEMDISCLAIM、DB2MEMMAXFREE、NUM_POOLAGENTS與DB2中代理的私有內存相關,而ESTORE_SEG_SZ、NUM_ESTORE_SEGS則決定擴展緩沖池的大小。

AIX中,注冊變量DB2MEMDISCLAIM指明當程序停止時DB2 UDB是否應該釋放其占用的全部或部分內存。DB2MEMDISCLAIM保持缺省值YES,則在DB2MEMMAXFREE的值為空時,程序結束后釋放所有相關內存,否則只保留DB2MEMMAXFREE值大小的內存量,該值缺省為8M。如果DB2MEMDISCLAIM的值被改為NO,則程序結束后內存不會被釋放。

NUM_POOLAGENTS指定了DB2中可以保留的空閑代理的最大數目,如果該值過大,將會有大量的內存被空閑代理占用。如NUM_POOLAGENTS的值為125,DB2MEMMAXFREE的值為8M,在DB2MEMDISCLAIM為YES時將最多有約1G的內存被空閑代理占用。

因此,當Paging Space使用率偏高時,可以嘗試查看DB2MEMDISCLAIM、DB2MEMMAXFREE、NUM_POOLAGENTS的值來確保沒有過多的內存被DB2代理所占用。如果空閑代理占用內存太多,則需要調整DB2MEMMAXFREE、NUM_POOLAGENTS的值來削減。

DB2MEMDISCLAIM、DB2MEMMAXFREE的值可用db2set命令來查看和設定;NUM_POOLAGENTS的值則可以通過以下步驟來查看和修改:

DB2中除了主緩沖池之外還經常用到擴展緩沖池,擴展緩沖池的大小也是決定內存使用量的一個重要因素。擴展緩沖池(EXTENDED STORAGE)充當的是緩沖池中被換出頁的輔助緩存,它的存在可以減少I/O操作,提高查詢速度。通常擴展緩沖池占用的內存不會主動釋放,因此如果擴展緩沖池過大,隨着時間的增加、緩沖池占用的內存量的不斷增長,有相當大的可能造成內存資源的短缺、Paging Space使用率過高。

擴展緩沖池的大小是由參數ESTORE_SEG_SZ、NUM_ESTORE_SEGS共同決定的,通過以下命令可以查看它們的值:

擴展緩沖池最多占用內存的計算方式如下:

假如系統中共有3個配置相同的DB,ESTORE_SEG_SZ的值為16000,NUM_ESTORE_SEGS的值為65,頁面大小為4K,則擴展緩沖池最多可占用的內存為:

ESTORE_SEG_SZ、NUM_ESTORE_SEGS的參數值設定可以通過如下命令來實現:

DB2中還有其他一些參數決定着內存的使用情況,但是當發現內存占用后不釋放的情況時,可以考慮首先查看本節中提到的相關參數。

對於其他的數據庫,同樣也需要注意一些類似參數值的設置,避免造成對內存的過量占用,從而造成對系統整體性能的影響。

 

轉自《http://www.ibm.com/developerworks/cn/aix/library/au-cn-pagingspace/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM