svmon概述
svmon 命令用于顯示當前內存狀態的信息,可通過
# lslpp bos.perf.tools
查看是否有安裝。因為 svmon 命令在啟用中斷的用戶級別運行,所以顯示的信息不組成真正的內存快照。 在非常繁忙的系統中,svmon收集的數據和真實的數據有所差距,在svmon進程搜集的過程中,VMM(虛存管理器)可能已經發生改動了。
因為svmon使用的全是VMM中的數據,而VMM對內存的視圖是基于內存段的,所以,理解svmon的輸出,必須先理解段的概念。
段
段(segment)是一組頁的合集, 用來報告內存消耗的基本對象。因此 svmon 所報告的統計信息是以頁面表示的。 每個段為256M,而每頁為4KB字節的虛存,每幀為4KB字節的實存,每個段可同時被多個進程使用,每個段屬于以下五種類型其中的一種:
persistent:存放JFS文件或目錄
working:進程數據區域和共享內存段
client:用于實現虛擬文件系統如NFS,CD-ROM文件系統和JFS2
mapping:用于實現文件和內存之間的映射關系
real memory mapping:用于對I/O空間的訪問
svmon參數詳解
具體使用范例
1、全局統計信息
#svmon -G
size inuse free pin virtual mmode
memory 3932160 2729499 1202661 818627 1616925 Ded
pg space 8388608 8595
work pers clnt other
pin 675474 0 2801 140352
in use 1616925 0 1112574
PageSize PoolSize inuse pgsp pin virtual
s 4 KB - 1966891 8595 209571 854317
m 64 KB - 47663 0 38066 47663
其中
inuse-------已使用的
free---------空閑的
pin-----“釘”在內存中的內存段(筆者認為這不是固定內存段)
virtual-----虛擬內存段
work------工作內存段
pers-------固定內存段
other------- mapping和real mapping memory
PageSize-----不同內存頁大小的統計情況,s為常規頁面,大小為4k,m為大頁面大小為64k。
pgsp------ 分頁空間的使用情況
注意,在段的描述中,如果paging space使用的節中如果有一橫(-),表明該段未使用交換區,work段可能使用交換區,但persistent段和client段不會使用交換區。
2、打印 1/2 小時中每分鐘的全局統計信息,請輸入:
#svmon -G -i 60 30
3、要打印出只考慮工作段的用戶 root 和 steve 的內存使用統計信息,請輸入:
#svmon -U root oracle -w
===============================================================================
User Inuse Pin Pgsp Virtual
oracle 558293 16880 0 558293
PageSize Inuse Pin Pgsp Virtual
s 4 KB 515157 80 0 515157
m 64 KB 2696 1050 0 2696
........................................................................................
SYSTEM segments Inuse Pin Pgsp Virtual
13129 8552 0 13129
PageSize Inuse Pin Pgsp Virtual
s 4 KB 3785 72 0 3785
m 64 KB 584 530 0 584
Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual
20002 0 work kernel segment m 584 530 0 584
以上省略一部分輸出。。。。
用戶運行的進程所使用的段分成三個類別:
系統:所有進程共享的段
互斥:屬于oracle 的進程集所使用的段
共享:幾個用戶共享的段。
其中
Vsid:表示虛擬段標識符。表示在虛擬內存管理器中的唯一段。
Esid: 表示有效的段標識符。Esid只有在段屬于進程的地址空間時才有效。提供時,它表示進程如何使用段。如果 vsid 段被幾個進程映射,但具有不同的 esid 值, 那么該字段包含“-”。如果是那樣的話,那么通過應用于使用該段的每個進程標識符的 -P 標志,可以獲得精確的 esid 值。因為用于管理打開的文件或多線程結構的段不是進程的用戶地址空間的一部分,所以也對這些段顯示“-”。
3、 可將使用實存最多的三個進程標出
# svmon -uP -t 3|grep -p Pid|grep '^.*[0-9] '
5428 X 4681 1584 2656 9156 N N
16274 bin 4594 1588 2273 8824 N Y
6458 dtgreet 4660 1580 2144 8712 N N
輸出的格式順序為 Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd
可以計算出X程序所使用的實存為4681×4096=18763776,約為18MB
4、 可將使用交換區最多的三個進程標出
# svmon -gP -t 3|grep -p Pid|grep '^.*[0-9] '
5428 X 4681 1584 2656 9156 N N
16274 bin 4594 1588 2273 8824 N Y
6458 dtgreet 4660 1580 2144 8712 N N
第一個程序X所使用的交換區大小約為 2566×4096 =10510336 字節,大約為10MB空間
5、 每隔三秒顯示使用最多的段
# svmon -S -t 3 -i 3
Vsid Esid Type Description Inuse Pin Pgsp Virtual
4f08 - clnt 37505 0 - -
11e1 - clnt 33623 0 - -
8811 - work kernel pinned heap 12637 6547 8091 19397
可見,Vsid為4f08的段使用最多
6、 看PID為22674的進程所使用的為固定內存
#svmon -pP 22674
7、要打印出段 700e 8811 和 bed7 的內存使用統計信息,請輸入:
#svmon -S 700e 8811 bed7 1cf8e
8、打印出命令 login ,ksh的內存使用統計信息, 包括地址范圍,請輸入:
#svmon -C login ksh -r
9、要打印出只考慮非系統工作段的所有進程的內存使用統計信息,并且根據虛擬頁面數對該進程排序,請輸入:
#svmon -P -n -w -v
10、根據實內存的頁數將系統段排序,并且打印出結果列表中最高的 10 個系統段,請輸入:
#svmon -S -s -u -t 10
11、只打印大頁面段,請輸入:
#svmon -S -q
常見問題分析
svmon -S中inuse的求和結果比svmon -G中的inuse小
下面的腳本可以用來統計svmon -S中的inuse的相加結果:
==============================================
#!/usr/bin/ksh
svmon -S | cut -c54-62 | awk '/^[-sLm]/ {if ($1 ~ /L/)
{COUNT1 =($2*4096+COUNT1)}
else if ($1 ~ /m/)
{COUNT2 =($2*16+COUNT2)}
else {COUNT3 =$2+COUNT3}}
END {printf "The result is as following with 4k as unit size\n16M page count=%d\n64k page count=%d\n4k page count=%d\nTatal page count=%d\n", COUNT1,COUNT2,COUNT3,'COUNT1+COUNT2+COUNT3'}'
========================================================
那么,產生這種差別的原因是什么呢?解釋如下:
svmon -S用來顯示系統中所有內存段(segment)的內存使用信息。AIX上僅存在三種內存段,它們是work,client和persistent。因此,統計svmon -S中inuse的和就是將被使用的上述三種內存段進行求和。但是,這種統計并沒有將系統上所有的被使用的內存頁面統計進來。系統里存在著一些尚未被VMM管理的內存頁面(mapping和real mapping memory),這些頁面已經被使用,但是不屬于上述三種內存段,因此在svmon -S中體現不出來。而svmon -G則包含了這些未被管理的頁面。
這些未被VMM管理的內存主要是被硬件使用,用來對物理內存做一些設置。在AIX 5L中,可以通過在kdb執行vmstat來查看未被管理的內存,輸出如下:
VMM Memory Limits:
Total available memory (4K frames) : 00100000 4.0GB
Total unmanaged mem (wlm_hw_pages): 0000D639 214.3MB
4K number of frames : 000F29C7 3.8GB
4K frames pinned : 00009FEE 160.0MB
4K system pinnable frames remaining: 000B817E 2.9GB
4K user pinnable frames remaining : 000BC0BC 3.0GB
Free paging space (in 4K blocks) : 0001FD00 509.0MB
Paging space SIGDANGER level : 00001000 16.0MB
Paging space SIGKILL level : 00000400 4.0MB
其中“unmanaged mem”就代表這類未被VMM管理的內存頁面
參考至:http://www.eygle.com/digest/2009/07/ibm_aix_svmon.html
http://www.kuqin.com/aixcmds/aixcmds5/svmon.htm#c013820260joy
http://www-900.ibm.com/cn/support/viewdoc/detail?DocId=2811998D15000