AIX交換內存管理

AIX交換空間管理與查看

一, 交換磁盤空間概念

1.1 虛擬內存

1.2 虛擬內存管理器(VMM)

1.3 交換(分頁)空間概念

1.4請求分頁

二, 查看交換磁盤空間

2.1 lsps命令

2.2 使用vmo命令檢查AIX如何處理分頁空間分配

2.3 vmstat監視分頁控件的顛簸

2.4 svmon檢查正在使用交換空間的進程

2.5 交換空間檢查實例

三, 管理交換磁盤空間

四, 優化交換磁盤空間


AIX交換空間管理與查看

AIX的內存頁面大小爲4K, 是虛擬內存管理(VMM)的最小單位. 頁面空間也可以被稱爲交換空間(paging space), 創建在屬性類型爲paging的邏輯卷(logic volume LV)上. 交換空間是一項很重要的設備. AIX kernel需要利用paging space來管理虛擬內存.系統安裝時創建的默認頁面LV是hdisk0上的hd6, 也叫主交換空間.

AIX5L默認採用交換空間的延遲分配策略(deferred page space allocation), 利用環境變量psalloc來控制內存的機制與頁面的分配策略, 缺省設置是late. 在這種設置下, 知識需要用到的時候, 纔去分配交換空間, 正常情況下, 不需要很大的交換空間, 所以適合大內存的系統, 可以減少很多paging space資源的浪費.

一, 交換磁盤空間概念

1.1 虛擬內存

內存在計算機中的作用很大,電腦中所有運行的程序都需要經過內存來執行,如果執行的程序很大或很多,就會導致內存消耗殆盡。爲了解決這個問題,Windows中運用了虛擬內存技術,即拿出一部分硬盤空間來充當內存使用,當內存佔用完時,電腦就會自動調用硬盤來充當內存,以緩解內存的緊張。舉一個例子來說,如果電腦只有128MB物理內存的話,當讀取一個容量爲200MB的文件時,就必須要用到比較大的虛擬內存,文件被內存讀取之後就會先儲存到虛擬內存,等待內存把文件全部儲存到虛擬內存之後,跟着就會把虛擬內裏儲存的文件釋放到原來的安裝目錄裏了。

允許設置的虛擬內存最小值爲2MB,最大值不能超過當前硬盤的剩餘空間值,同時也不能超過操作系統的內存尋址範圍。

1.2 虛擬內存管理器(VMM)

VMM服務於來自系統以及應用程序的內存請求. 虛擬內存段以頁爲單位進行分區, 每個頁面大小爲4KB.VMM就是用來管理這些存儲頁面.

1, 實際內存管理

在AIX中,虛擬內存段被分成4096字節大小的頁,物理內存則被劃分爲4096字節大小的頁幀(page frame),VMM主要有以下兩個主要功能: 
(1) 管理頁幀的分配 
(2) 解析對當前沒有調入RAM中的虛擬內存頁的引用 
    爲了完成上述功能,VMM維護一個可用幀列表,並且使用一個頁面替換算法決定哪些當前在RAM中的虛擬內存頁使用的頁幀將被分配到可以可用幀列表。頁面替換算法將考慮永久段(Persistent segment)和工作段(Working segment)的分配、頁交換和VMM閾值等因素。

2, 永久段(Persistent segment)和工作段(Working segment)

 AIX 區分不同的存儲段類型。理解不同的存儲段類型,特別是工作段和永久段的區別非常重要。

永久段在磁盤上有一個永久的存儲位置。含有不可編輯數據的文件或者只讀的運行程序被映射到持久段。VMM 參數控制什麼時候分配給永久段的RAM頁幀可以被重寫,並且用於存儲新的數據。

工作段是臨時性的,僅在它們被某個進程使用的時候存在,並且沒有固定的磁盤位置。進程堆棧以及數據區,共享庫文本被映射到工作段。當工作段數據也不能存在於“實”存中的時候,他們被保存在磁盤上的頁交換空間。程序退出執行,所有工作段佔用的頁面被返回。

3, VMM 內存調用控制機制

當一個進程引用一個在磁盤上的虛擬內存頁,被引用的頁先要換到頁幀中,如果內存已經滿了,這可能導致一個或更多的頁從頁幀中換出,以騰出空間。這種情況一般發生在可用頁幀數已經很低的情況。而VMM將使用前述頁交換算法來滿足系統對內存的需要。

一個有效的頁交換算法要保持當前活動進程所使用的頁總是在RAM中,而非活動進程使用的存儲頁將被移出。但是當RAM不足的時候,選擇移出頁將很困難,因爲被移出的頁可能很快又要被引用,這導致一些頁面被頻繁的換入換出。系統大部分時間在做頁交換而不是執行進程指令。VMM使用存儲器調用控制算法來檢測這種情況,並予以糾正。

1.3 交換(分頁)空間概念

什麼是交換(分頁)空間?它是與 VMM 有關的。VMM 使用交換(分頁)空間存儲沒有使用活動RAM 的進程。分頁空間本身是一個特殊的邏輯卷,它存儲了當前不訪問的信息。您必須確保您的系統擁有足夠的分頁空間。如果分頁空間過小,整個進程可能會丟失,並且當所有的空間都佔滿後,系統可能會崩潰。儘管值得再次說明,分頁空間是 VMM 中的一部分,但是更重要的是真正地理解內核如何將進程調入到 RAM 中,過多的分頁肯定會對性能造成影響。AIX 通過將內核與 VMM緊密集成在一起,實現了一種稱爲請求分頁的方法。

1.4請求分頁

在這個部分中,我介紹了 AIX 如何處理分頁,給出了交換和分頁的定義,並深入地研究了分頁空間分配的幾種不同模式。這些概念可以幫助您理解後續有關監視、配置和優化的部分。

大多數管理員都認爲分頁是一件很麻煩的事情。實際上,分頁是 AIX 所完成的任務中非常必要的一部分,這是由於 AIX內核與 VMM 及其請求分頁的實現進行了緊密的集成。請求分頁的工作原理是,內核一次僅加載部分頁面到實際內存中。當CPU 需要另一個頁面時,它會到 RAM 中查找。如果無法在 RAM 中找到這個頁面,則出現一次缺頁,然後向內核發出信號以便從磁盤中加載更多的頁面到 RAM。請求分頁的一個優點是,分頁空間不需要非常大,因爲數據總是在分頁空間和 RAM之間不斷地交換。在較早的 UNIX® 系統中,將分頁預先分配到磁盤,無論使用還是不使用它們。這使得所分配的磁盤空間可能永遠不會被使用。從本質上說,請求分頁可以避免盲目地分配磁盤空間。應該使得進程的交換最少,因爲許多任務可能存儲在 RAM 中。的確如此,因爲進程(頁面)只有一部分存儲在 RAM 中。

交換指的是什麼呢?儘管分頁和交換通常可以互換使用,但它們之間存在細微的區別。如前所述,在進行分頁時,進程的部分內容將在磁盤和 RAM 之間來回移動。當發生交換時,會將整個進程來回移動。爲了支持這種情況,在將進程移動到分頁空間之前,AIX 會掛起整個進程。只有在將進程交換回 RAM 之後,才能夠繼續執行它。出現這樣的情況並不是很好,您應該儘量防止交換的發生,交換可能會導致另一種稱爲顛簸的情況(稍後將介紹這個內容)發生。

二, 查看交換磁盤空間

2.1 lsps命令

Lsps主要用來顯示調頁空間的特徵.

lsps { -s | [ -c -l ] { -a -t { lv | nfs } | PagingSpace } }

1, -a, 指定要給出的所有調頁空間的特徵.

# lsps -a

Page Space      Physical Volume   Volume Group    Size %Used Active  Auto  Type

hd6             hdisk0            rootvg        8192MB    13   yes   yes    lv

2, -c, 指定輸出應該使用冒號格式在邏輯分區中以冒號格式給出調頁空間大小

# lsps -c -a

#Psname:Pvname:Vgname:Size:Used:Active:Auto:Type

hd6:hdisk0:rootvg:32:13:y:y:lv

3, -l, 指定輸出應該使用表格式

 

4, 指定要給出的所有調頁空間的概要特徵如果指定-s標記忽略所有其他標記

# lsps -as

Total Paging Space   Percent Used

      8192MB              13%

2.2 使用vmo命令檢查AIX如何處理分頁空間分配

    # vmo -a | grep def

                 defps = 1

vmo命令用來管理虛擬內存管理器可調參數. –a顯示所有可調參數的當前, 重新引導或永久值.

上述顯示defps=1說明使用了這種缺省的方法(延遲的頁面空間分配)。要禁用這個策略,您需要將參數設置爲 0。這將使得系統使用晚分頁空間分配策略。晚分頁空間分配策略會在 RAM 中相應的頁面被修改時才分配分頁磁盤塊。這種方法通常用於那些性能比可靠性更加重要的環境。在本文所介紹的場景中,程序可能會因爲缺少內存而運行失敗。那麼早頁面空間分配又如何呢?如果您希望確保進程不會因爲較低的分頁情況而終止,通常可以使用這種策略。早頁面空間分配策略可以預先分配分頁空間。這是與晚分頁空間分配策略截然相反的。對於可靠性要求很高的環境,可以使用這種策略。啓用這種策略的方法是將 PSALLOC 環境變量設置爲 early (PSALLOC=early)

2.3 vmstat監視分頁控件的顛簸

    # vmstat 2 4

 

System configuration: lcpu=4 mem=3824MB

 

kthr    memory              page              faults        cpu   

----- ----------- ------------------------ ------------ -----------

 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa

 0  0 479301  2384   0   0   0   0    0   0   5 1045  74  0  0 99  0

 0  0 479300  2385   0   0   0   0    0   0   6  965  86  0  0 99  0

 0  0 479300  2385   0   0   0   0    0   0   5  976  90  0  0 99  0

 0  0 479300  2385   0   0   0   0    0   0   6 1026  79  0  0 99  0

說明

Avm

系統使用的活動虛擬內存量(單位爲4K), 不包括文件頁面

Fre

空閒內存列表的大小, 一般不應該小於vmo中設置的minfree.

Pi

從交換空間調入的頁面數

Po

調出到交換空間的頁面數

2.4 svmon檢查正在使用交換空間的進程

Svmon命令主要用來捕獲並分析虛擬內存快照.

該命令報告進程的語法爲

svmon -P [ PID1... PIDN ] [ -r [ -n | -s ] [ -w | -f | -c ] [ -t Count ] [ -u | -p | -g | -v ] [ -iInterval [ NumIntervals] ] [ -l ] [ -j ] [ -z ] [ -m ] [ -q ]

svmon命令是虛擬內存的監視命令, svmon可以用於確認某個程序, 用戶, 內存段使用內存或虛存的情況. 它事實上是調用svmon back命令, 在使用svmon命令之前, 必須確定svmon back命令可用, 該命令位置爲/usr/lib/perf/svmon_back

svmon在運行過程中可以被中斷, 所以,它無法真正成爲內存使用情況的快照. 在非常繁忙的系統中, svmon收集的數據和真實的數據有所差距, 在svmon進程蒐集的過程中, vmm可能已經發生改動了.

因爲svmon使用的全是vmm中的數據, 而vmm對內存的視圖是基於內存段的, 所以理解svmon的輸出, 必須先理解段的概念.

段是一組頁的集合, 每個段爲256M, 而每頁爲4KB的虛存, 每幀爲4KB的實際內存, 每個段可以被多個進程使用, 每個段屬於以下五種類型的一種.

Persistent(持久段): 存放JFS文件或目錄.

Working(工作段): 存放進程數據或共享內存段.

Client(): 用於實現虛擬文件系統如NFS, CD-ROM文件系統和JFS2;

Mapping(): 用於實現文件和內存之間的映射關係.

Real memory mapping: 用於對IO空間的訪問.

注意, 在段的描述中, 如果paging space使用的節中有一橫(-) , 表明該段未使用交換區, working段可能使用交換區,但persistent和client不會使用交換區.

1, 列出使用實際內存最多的三個進程.

# svmon -uP -t 3|grep -p Pid | grep '^.*[0-9]'

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  442460 oracle          271187     7953   179711   275344      Y     N     N

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

 1155298 oracle          264700     7953   176642   272827      Y     N     N

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  323600 oracle          264684     7953   178168   274243      Y     N     N

由上面的顯示我們可以計算pid=442460的進程使用的實際內存爲 271187*4K = 1059M

說明

PID

表示進程標識符

Command

進程正在運行的命令

Inuse

進程使用的段中的實際內存的頁面總數(計算大小應乘以4092B)

Pin

固定內存: 進程使用的段中固定內存的頁面總數

Pgsp

交換空間: 進程使用的段在調頁空間上保留或使用的頁面總數

Virtual

在進程虛擬空間中分配的頁面總數

64-bit

是64位進程(Y)還是32位進程(N)

Mthrd

進程是否爲多線程(Y)

16MB

進程的大頁面狀態. “M”表示強制性, “Y”表示進程使用或已經使用大頁面段, “N”表示進程不使用大頁面.

 

2, 列出使用交換區最多的三個進程

svmon -gP -t 5 | grep -p Pid | grep '^.*[0-9]'

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  462924 oracle          264568     7953   188139   283991      Y     N     N

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  442460 oracle          271480     7953   179707   275342      Y     N     N

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  323600 oracle          264804     7953   178164   274241      Y     N     N

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

 1179830 oracle          251210     7953   177081   272633      Y     N     N

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  299146 oracle          251246     7953   177065   272687      Y     N     N

由上面的顯示計算出, 使用交換空間最大的進程用到的交換區間大小爲 188139 * 4092 = 734 MB

3, 查看進程462924使用了哪些文件

# svmon -pP 462924

 

-------------------------------------------------------------------------------

     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB

  462924 oracle          264566     7953   188139   283989      Y     N     N

 

    Vsid      Esid Type Description              PSize  Inuse   Pin Pgsp Virtual

       0         0 work kernel segment               s   8068  7931 3849 12181

   40a54 f00000002 work process private              s     27    22    3    29

   6cabf  8fffffff work private load data            s      0     0   36    36

   18026  9ffffffe work shared library               s     13     0   14    14

    30a0  90000000 work shared library text          s   1062     0   68  2759

   1c843         - clnt /dev/fslv03:92               s      2     0    -     -

    84a6         - clnt /dev/fslv01:76408            s      0     0    -     -

   18482         - clnt /dev/fslv01:143871           s      2     0    -     -

   204ac         - clnt /dev/fslv01:76409            s      0     0    -     -

    4525  70000003 work default shmat/mmap           s      0     0    0     0

   244ad         - clnt /dev/fslv03:76               s      6     0    -     -

   184e2  70000005 work default shmat/mmap           s  38968     0 21088 40950

    8926         - clnt /dev/fslv03:88               s      2     0    -     -

    c527         - clnt /dev/fslv01:191039           s      0     0    -     -

   50830         - clnt /dev/fslv03:78               s      2     0    -     -

   344a9  70000007 work default shmat/mmap           s  39557     0 25293 45057

   10540         - clnt /dev/fslv03:75               s      2     0    -     -

   44475         - clnt /dev/fslv03:91               s    635     0    -     -

    8566         - clnt /dev/fslv03:87               s    528     0    -     -

   14941         - clnt /dev/fslv03:85               s      2     0    -     -

   3c4ab         - clnt /dev/fslv03:77               s      0     0    -     -

   408b4         - clnt /dev/fslv03:81               s      2     0    -     -

   444b5         - clnt /dev/fslv03:71               s     36     0    -     -

   4c497         - clnt /dev/fslv01:191040           s      0     0    -     -

   30508  70000006 work default shmat/mmap           s  62488     0 34002 65520

   484b6         - clnt /dev/fslv03:70               s     36     0    -     -

   30748         - clnt /dev/fslv03:79               s      6     0    -     -

   34509  70000008 work default shmat/mmap           s  57007     0 54623 59208

   3ca6b        11 work text data BSS heap           s    318     0 12706 13052

   4c4b7         - clnt /dev/fslv03:69               s     60     0    -     -

   404f4         - clnt /dev/fslv03:68               s      2     0    -     -

   7881a         - clnt /dev/fslv03:80               s      6     0    -     -

   4c4d7         - clnt /dev/fslv03:66               s   8802     0    -     -

   3852a         - clnt /dev/fslv01:76412            s      0     0    -     -

   40514  70000002 work default shmat/mmap           s      0     0    0     0

   484f6         - clnt /dev/fslv03:67               s    600     0    -     -

   6049c        10 clnt text data BSS heap,          s   8518     0    -     -

                        /dev/fslv01:73964                                      

   70478         - clnt /dev/fslv03:84               s      2     0    -     -

   604bc         - clnt /dev/fslv03:86               s      2     0    -     -

    8226  9fffffff clnt USLA text,/dev/hd2:2165      s      9     0    -     -

   48536  80020014 work USLA heap                    s      0     0  104   104

   70498         - clnt /dev/fslv01:190026           s      0     0    -     -

   3c56b         - clnt /dev/fslv03:89               s      6     0    -     -

   684be  70000009 work default shmat/mmap           s  31632     0 33846 38930

   7c47b         - clnt /dev/fslv03:82               s   1370     0    -     -

   784ba         - clnt /dev/fslv03:90               s      2     0    -     -

   54951  9001000a work shared library data          s     18     0   48    89

   744d9         - clnt /dev/fslv03:65               s    980     0    -     -

   50570         - clnt /dev/fslv03:83               s      0     0    -     -

    c687  70000000 mmap maps 1 source(s)             s      0     0    -     -

   6851e  70000004 work default shmat/mmap           s      0     0    0     0

   20a4c  8001000a work private load data            s      1     0  146   146

   3822a  90020014 work shared library               s     58     0   95    96

   34a49  70000001 work default shmat/mmap           s   3580     0  553  4076

   48a16  ffffffff work application stack            s      8     0    6    14

4001  9ffffffd work shared library               s    141     0 1659  1728

說明

VSid

虛擬段標識符, 在VMM中的唯一段

Esid

有效的段標識符, 只有在段屬於進程空間時纔有效. 如果vsid段被幾個進程映射,但具有不同的sid值, 那麼該字段包含”-“.

Type

段的類型

Description

段的文本描述, 列的內容取決於段的類型和用途

Psize

表示該段是否使用大頁面

Inuse

段中的實際內存頁數

Pin

段中的固定內存頁數

Pgsp

該段在調頁空間上的頁數

Virtual

分配給段的虛擬空間的頁數

 

2.5 交換空間檢查實例

1, 使用swap命令查看交換磁盤空間信息

    # swap -l

device              maj,min        total       free

/dev/hd6              10,  2      8192MB      7166MB

結果說明, 系統中定義了一個交換分區. 分區使用了8192-7166=1026MB的空間.

2, 檢查當前交換空間剩餘情況

# lsps -a

Page Space      Physical Volume   Volume Group    Size %Used Active  Auto  Type

hd6             hdisk0            rootvg        8192MB    13   yes   yes    lv

如果上面顯示的%used較高, 則可能會出現危險. 這時需要檢查系統登錄時間, 如果登錄已經很久了, 可以考慮重啓系統以輕快數據庫緩存, 這樣就可以釋放虛擬內存.

3, uptime檢查系統啓動時間

   # uptime

  05:28PM   up 181 days,  16:15,  1 user,  load average: 0.00, 0.00, 0.00

三, 管理交換磁盤空間

可以通過如下命令創建一個交換空間

#mkps -s’16′ -n -a datavg hdisk2

其中-s表示pp個數,-n表示啓動後是否自動激活,-a表示是否當時激活。

可以採用如下命令改變交換空間大小

新增加10個pp

#chps -s’10′ paging00

減少10個pp

#chps -d’10′ paging00

    shrinkps: Temporary paging space paging01 created.

    shrinkps: Paging space paging00 removed.

    shrinkps: Paging space paging00 recreated with new size.

對於5L以上的版本,可以直接用chps -d來操作hd6

#chps -d’10′ hd6

    shrinkps: Temporary paging space paging00 created.

    shrinkps: New boot image created with temporary paging space.

    shrinkps: Paging space hd6 removed.

    shrinkps: Paging space hd6 recreated with new size.

    shrinkps: New boot image created with resized paging space.

如果要使交換空間處於非活動狀態,可以採用

#swapoff /dev/’paging00′

相反,處於活動狀態可以採用

#swapon /dev/’paging00′

如果要刪除一個ps交換空間,必須先使這個空間處於非活動狀態,然後採用命令rmps刪除。如

#rmps ‘paging00′

    rmlv: Logical volume paging00 is removed.

四, 優化交換磁盤空間

系統究竟需要多大的交換空間?

首先, 我們認爲將分頁空間的大小設置爲RAM的兩倍(以前的基本原則). 通常來說, 如果我的系統擁有超過4GB的內存, 我會按照RAM的大小來創建分頁空間.在投入運行之後, 要經常監視系統, 如果看到分頁空間的利用率從來都沒有接近過百分之五十, 就不需要添加額外的空間. Oracle爲AIX提供的文檔推薦設置交換空間爲RAM大小的一半加上4GB, 但是上限爲32GB.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章