如何檢查頁出和記憶體 (sar -g)
使用 sar -g 指令可顯示平均頁出和記憶體釋放活動。$ sar -g00:00:00 pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf01:00:00 0.00 0.00 0.00 0.00 0.00sar -g 指令的輸出可以明确訓示是否需要更多記憶體。使用 ps -elf 指令顯示 page 守護程式使用的周期數。如果周期數很大,并且 pgfree/s 和 pgscan/s 字段的值也很大,則表明記憶體不足。sar -g 指令還可表明是否回收 inode 的速率過快而引起可重用頁丢失。
示例 13–8 檢查頁出和記憶體 (sar -g)
以下示例顯示 sar -g 指令的輸出。
|
下表介紹了 -g 選項的輸出。
字段名 | 說明 |
---|---|
pgout/s | 每秒的頁出請求數。 |
ppgout/s | 每秒調出的頁的實際數量。單個頁出請求可能涉及多個頁的調出。 |
pgfree/s | 每秒放置在可用清單中的頁數。 |
pgscan/s | page 守護程式每秒掃描的頁數。如果此值很大,則表明 page 守護程式花費大量時間來檢查可用記憶體。此情況暗示,可能需要更多記憶體。 |
%ufs_ipf | 具有關聯的可重用頁的 iget 從可用清單中取消的 ufs inode 的百分比。這些頁面被重新整理,并且不能由程序回收。是以,此字段表示具有頁面重新整理的 igets 的百分比。如果該值很大,則表明 inode 的可用清單頁面密集,并且可能需要增加 ufs inode 的數量。 |
檢查核心記憶體配置設定
KMA 允許核心子系統根據需要配置設定和釋放記憶體。
KMA 并不是靜态配置設定在峰值載荷下預計所需的最大記憶體量,而是将記憶體請求劃分為三個類别:
- 小型(少于 256 位元組)
- 大型(512 位元組至 4 千位元組)
- 超大型(大于 4 千位元組)
KMA 保留兩個記憶體池,以滿足小型和大型請求。超大型請求則通過從系統頁面配置設定器中配置設定記憶體來滿足。
如果您所檢查的系統用來編寫使用 KMA 資源的驅動程式或 STREAMS,則 sar -k 指令可能很有用。否則,您可能不需要它所提供的資訊。使用 KMA 資源但不一定在退出前傳回資源的所有驅動程式或子產品都可能産生記憶體洩漏。記憶體洩漏會導緻 KMA 配置設定的記憶體量随事件而增加。是以,如果 sar -k 指令的 alloc 字段随時間穩定增加,則可能存在記憶體洩漏。表明存在記憶體洩漏的另一種情況是請求失敗。如果出現此問題,記憶體洩漏很可能導緻 KMA 無法保留和配置設定記憶體。
如果似乎存在記憶體洩漏,則應檢查可能從 KMA 請求記憶體但未傳回記憶體的所有驅動程式或 STREAMS。
如何檢查核心記憶體配置設定 (sar -k)
使用 sar -k 指令可報告核心記憶體配置設定器 (Kernel Memory Allocator, KMA) 的以下活動。$ sar -k00:00:00 sml_mem alloc fail lg_mem alloc fail ovsz_alloc fail01:00:00 2523136 1866512 0 18939904 14762364 0 360448 002:00:02 2523136 1861724 0 18939904 14778748 0 360448 0
示例 13–9 檢查核心記憶體配置設定 (sar -k)
下面是 sar -k 輸出的縮寫示例。
|
下表介紹了 -k 選項的輸出。
sml_mem | KMA 在小型記憶體請求池中可用的記憶體量,以位元組為機關。在此池中,小型請求小于 256 位元組。 |
alloc | KMA 已從其小型記憶體請求池向小型記憶體請求配置設定的記憶體量,以位元組為機關。 |
fail | 請求少量記憶體并失敗的請求數。 |
lg_mem | KMA 在大型記憶體請求池中可用的記憶體量,以位元組為機關。在此池中,大型請求介于 512 位元組到 4 千位元組之間。 |
KMA 已從其大型記憶體請求池向大型記憶體請求配置設定的記憶體量,以位元組為機關。 | |
請求大量記憶體并失敗的請求數。 | |
ovsz_alloc | 為大于 4 千位元組的超大型請求配置設定的記憶體量。這些請求可通過頁面配置設定器來滿足。是以,不存在池。 |