如何檢查頁出和內存 (sar -g)
使用 sar -g 命令可顯示平均頁出和內存釋放活動。
$ sar -g
00:00:00 pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf
01:00:00 0.00 0.00 0.00 0.00 0.00
sar -g 命令的輸出可以明確指示是否需要更多內存。使用 ps -elf 命令顯示 page 守護程序使用的周期數。如果周期數很大,並且 pgfree/s 和 pgscan/s 字段的值也很大,則表明內存不足。
sar -g 命令還可表明是否回收 inode 的速率過快而引起可重用頁丟失。
示例 13–8 檢查頁出和內存 (sar -g)
以下示例顯示 sar -g 命令的輸出。
$ sar -g
SunOS balmyday 5.10 s10_51 sun4u 03/18/2004
00:00:00 pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf
01:00:00 0.00 0.00 0.00 0.00 0.00
02:00:00 0.01 0.01 0.01 0.00 0.00
03:00:00 0.00 0.00 0.00 0.00 0.00
04:00:00 0.00 0.00 0.00 0.00 0.00
05:00:00 0.00 0.00 0.00 0.00 0.00
06:00:00 0.00 0.00 0.00 0.00 0.00
07:00:00 0.00 0.00 0.00 0.00 0.00
08:00:00 0.00 0.00 0.00 0.00 0.00
08:20:01 0.00 0.00 0.00 0.00 0.00
08:40:00 0.00 0.00 0.00 0.00 0.00
09:00:00 0.00 0.00 0.00 0.00 0.00
09:20:01 0.05 0.52 1.62 10.16 0.00
09:40:01 0.03 0.44 1.47 4.77 0.00
10:00:02 0.13 2.00 4.38 12.28 0.00
10:20:03 0.37 4.68 12.26 33.80 0.00
Average 0.02 0.25 0.64 1.97 0.00
下表介紹了 -g 選項的輸出。
查看本欄目更多精彩內容:http://www.bianceng.cn/OS/unix/
檢查內核內存分配
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 -k
00:00:00 sml_mem alloc fail lg_mem alloc fail ovsz_alloc fail
01:00:00 2523136 1866512 0 18939904 14762364 0 360448 0
02:00:02 2523136 1861724 0 18939904 14778748 0 360448 0
示例 13–9 檢查內核內存分配 (sar -k)
下面是 sar -k 輸出的縮寫示例。
$ sar -k
SunOS balmyday 5.10 s10_51 sun4u 03/18/2004
00:00:04 sml_mem alloc fail lg_mem alloc fail ovsz_alloc fail
01:00:00 6119744 4852865 0 60243968 54334808 156 9666560 0
02:00:01 6119744 4853057 0 60243968 54336088 156 9666560 0
03:00:00 6119744 4853297 0 60243968 54335760 156 9666560 0
04:00:00 6119744 4857673 0 60252160 54375280 156 9666560 0
05:00:00 6119744 4858097 0 60252160 54376240 156 9666560 0
06:00:00 6119744 4858289 0 60252160 54375608 156 9666560 0
07:00:00 6119744 4858793 0 60252160 54442424 156 9666560 0
08:00:00 6119744 4858985 0 60252160 54474552 156 9666560 0
08:20:00 6119744 4858169 0 60252160 54377400 156 9666560 0
08:40:01 6119744 4857345 0 60252160 54376880 156 9666560 0
09:00:00 6119744 4859433 0 60252160 54539752 156 9666560 0
09:20:00 6119744 4858633 0 60252160 54410920 156 9666560 0
09:40:00 6127936 5262064 0 60530688 55619816 156 9666560 0
10:00:00 6545728 5823137 0 62996480 58391136 156 9666560 0
10:20:00 6545728 5758997 0 62996480 57907400 156 9666560 0
10:40:00 6734144 6035759 0 64389120 59743064 156 10493952 0
11:00:00 6996288 6394872 0 65437696 60935936 156 10493952 0
Average 6258044 5150556 0 61138340 55609004 156 9763900 0
下表介紹了 -k 選項的輸出。