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

germany006發表於2016-02-22

一篇AIX關於Paging Space的接受

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

AIX 作業系統中的 Paging Space 是很重要的裝置,Paging Space 使用率過高將影響系統整體效能,甚至會造成系統掛起。文中對 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中還有其他一些引數決定著記憶體的使用情況,但是當發現記憶體佔用後不釋放的情況時,可以考慮首先檢視本節中提到的相關引數。

對於其他的資料庫,同樣也需要注意一些類似引數值的設定,避免造成對記憶體的過量佔用,從而造成對系統整體效能的影響。

5 結束語

文中針對AIX中Paging Space使用率過高的問題,分別從檔案型記憶體、應用程式記憶體洩露和資料庫引數配置三個方面進行了分析,並給出了相關的解決方法。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12778571/viewspace-626755/,如需轉載,請註明出處,否則將追究法律責任。

相關文章