![概括:](https://rvso.com/image/36008/%E6%A6%82%E6%8B%AC%EF%BC%9A.png)
問題:我們如何報告真實記憶體使用情況(沒有緩存!尼蒙或者虛擬機器狀態或者svmon在 AIX 6 上?
奈蒙:
虛擬機器統計:
svmon:
與在 Linux 上一樣,我們可以使用 free 命令,但在 AIX 中不可用:
[user@notebook ~]$ free -m
total used free shared buffers cached
Mem: 7797 4344 3453 0 219 2745
-/+ buffers/cache: 1379 6417
Swap: 2047 0 2047
[user@notebook ~]$ free -m | grep cache: | awk '{print $3}'
1379
[user@notebook ~]$
答案1
簡短版本:如果您想了解所有檔案緩存,請查看輸出中的正在使用clnt
+頁面(單位為4k頁面),或查看並查看「檔案頁面」以取得不包含可執行檔案的檔案快取(相同單位)。pers
svmon -G
vmstat -v
如果您想全面了解正在發生的事情,您應該查看以下文章:AIX 頁面替換概述。
簡而言之,AIX 中的記憶體有兩種分類方式:
工作記憶與永久記憶
工作記憶體是進程(堆疊、堆、共享記憶體)和核心記憶體。如果此類記憶體需要換出頁面,則會進行交換。
永久記憶體是檔案快取。如果需要調出,它會回到它來自的檔案系統(對於髒頁,乾淨頁會被回收)。這又分為 JFS 檔案系統的非客戶端(或持久性)頁面以及 JFS2、NFS 和其他可能的客戶端頁面。
計算頁面與非計算頁面。
計算頁面同樣是進程和核心數據,加上進程文字數據(即快取可執行檔/程式碼的頁面)。
非計算性的是其他的:不可執行的檔案快取(或共享庫)。
svmon -G
(順便說一句,svmon -G -O unit=MB
有點友好)為您提供工作而不是永久頁面。該work
專欄是工作記憶。透過將pers
(JFS) 和clnt
(JFS2) 欄位相加即可獲得永久記憶體。
在您的例子中,您有大約 730MB 的永久頁面,它們由您的檔案系統支援(186151*4k 頁面)。
現在,topas
右上角的「小工具」FileSystemCache (numperm)
顯示的內容略有不同,您將獲得相同的資料vmstat -v
:這只是非計算永久頁面。即與上面相同,但不包括可執行檔的頁面。
在您的情況下,大約為 350MB(16G 的 2.2%)。
不管怎樣,快取確實不多。
答案2
您正在尋找的指令(恕我直言)是:
# svmon -P -O filtertype=working,segment=off,filtercat=exclusive,unit=MB
這裡的關鍵選項是:
- 'filtertype=working' # 又名,無快取;
- 'segment=off' # 使用 -O 時其實是預設值
- 'filtercat=exclusive' # 不包括共享記憶體或核心 atm
- 'unit=MB' # 誰想根據頁數進行計算?
並且,您將需要查看其他選項,例如 -C (與命令名稱相關,下面的一些範例),也許還有 -U (與使用者相關)
++++ 評論開始 ++++
插入我本來要輸入的內容作為對您的問題的評論,但缺乏聲譽 - 作為這裡的新用戶。
您的vmstat 輸出告訴我的不僅僅是您當前的情況- 因為它是單行輸出- 它是歷史的- 我懷疑您遇到了內存問題,因為它顯示了pi/po 的歷史記錄(分頁空間頁面輸入/分頁空間頁面輸出)
其他感興趣的欄位是 fr/sr 欄位:
- fr:lrud 釋放的頁面(最近最少使用的守護進程,又稱頁面竊取程序)
- sr:lrud 掃描/搜尋的頁面尋找「舊」頁面
- sr/fr:表示必須「掃描」多少頁才能釋放 1 的比率
我認為令人不安的是這裡給出的 pi/po 值 - 並且與其他命令的數據完全不一致 - 這裡也沒有正常運行時間,所以很難知道“測試”是什麼生成了這些數字。
- pi:調頁空間頁入(即從調頁空間讀取應用程式記憶體)
- po:竊取記憶體並將應用程式(也稱為工作)記憶體寫入調頁空間 - 只有工作記憶體進入/來自頁面空間
在您的簡報中,您顯示 pi=22 和 po=7。這意味著,平均而言,系統從調頁空間讀取資訊(在寫入資訊後)的頻率比寫入資料的頻率高 3 倍。這表明系統處於飢餓狀態,因為數據正在被讀入(pi),然後在被觸及(引用也稱為使用)之前再次被竊取(sr/fr) - 或者在應用程式「等待」它之前再次讀入並刪除曾經有機會訪問它。
簡而言之,所提供的數據與“痛苦”時刻並不“同步”——儘管它可以解釋為什麼現在只有2.2% 的內存用於緩存(甚至可能是“計算性的,又名加載的程序” )。
據,直到...為止虛擬機器狀態我還建議使用標誌 -I(大寫:i,添加“fi”和“fo” - fileIn 和 fileOut 活動)和 -w(寬),以便數字更好地定位在文字標題下。
++++「評論」結束
讓我們來看看使用 -P 的摘錄(進程視圖)
# svmon -P -O filtertype=working,segment=off,filtercat=exclusive,unit=MB | head -15
Unit: MB
-------------------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual
14614630 httpd 21.5 0.06 0 21.5
11272246 httpd 21.4 0.06 0 21.4
12779758 httpd 21.2 0.06 0 21.2
17760476 httpd 20.9 0.06 0 20.9
11796712 httpd 20.8 0.06 0 20.8
17039454 httpd 20.6 0.06 0 20.6
11862240 httpd 20.6 0.06 0 20.6
14680090 httpd 20.5 0.06 0 20.5
10747970 httpd 20.5 0.06 0 20.5
11141286 httpd 20.5 0.06 0 20.5
4718766 mysqld 13.6 0.02 0 13.6
當您不是 root 時,您只能看到環境中的命令。
$ svmon -P -O filtertype=working,segment=off,filtercat=exclusive,unit=MB
Unit: MB
-------------------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual
5505172 svmon 10.7 0.19 0.44 11.4
6553826 ksh 0.57 0.02 0 0.57
9175288 ksh 0.55 0.02 0 0.55
12910710 sshd 0.55 0.02 0 0.55
15204356 sshd 0.52 0.02 0 0.52
12779760 head 0.18 0.02 0 0.18
您可能想查看特定命令 - 因此切換回 root 來查看 httpd
概括:
svmon -C httpd -O filtertype=working,segment=off,filtercat=exclusive,unit=MB
Unit: MB
===============================================================================
Command Inuse Pin Pgsp Virtual
httpd 227.44 0.69 0 227.44
詳情:摘錄
# svmon -C httpd -O filtertype=working,segment=category,filtercat=exclusive,unit=MB >
Unit: MB
===============================================================================
Command Inuse Pin Pgsp Virtual
httpd 230.62 0.81 0 230.62
...............................................................................
EXCLUSIVE segments Inuse Pin Pgsp Virtual
230.62 0.81 0 230.62
Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual
81a203 3 work working storage m 24.6 0 0 24.6
parent=883990
8b82d7 3 work working storage m 18.8 0 0 18.8
parent=834226
8b9d37 3 work working storage m 18.2 0 0 18.2
parent=884fb0
8915f2 f work shared library data m 2.00 0 0 2.00
parent=898373
89abb3 f work shared library data m 2.00 0 0 2.00
parent=84b9a9
824ea4 f work shared library data m 2.00 0 0 2.00
這並不能很好地顯示“段=類別”,因此現在使用更簡單的命令- tail - 並顯示每個內存“段”類型的摘要和詳細信息- 但仍然僅“工作”內存(也稱為無快取)
# svmon -C tail -O filtertype=working,segment=category,unit=MB
Unit: MB
===============================================================================
Command Inuse Pin Pgsp Virtual
tail 82.5 52.6 5.12 90.6
...............................................................................
SYSTEM segments Inuse Pin Pgsp Virtual
34.1 33.1 2.38 35.8
Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual
10002 0 work kernel segment m 34.1 33.1 2.38 35.8
...............................................................................
EXCLUSIVE segments Inuse Pin Pgsp Virtual
0.18 0.02 0 0.18
Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual
88b4f1 f work working storage sm 0.09 0 0 0.09
82d005 2 work process private sm 0.07 0.02 0 0.07
8e0c9c 3 work working storage sm 0.02 0 0 0.02
...............................................................................
SHARED segments Inuse Pin Pgsp Virtual
48.2 19.5 2.75 54.6
Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual
9000 d work shared library text m 48.2 19.5 2.75 54.6
答案3
nmon 然後按“m”將快速向您展示內存的一些大用途
ipcs -am
許多應用程式(例如 DB2 和 Oracle)使用的共享記憶體 - 透過命令檢查 SEGSZ 的大小ipcs -am
。 Owner 欄位通常告訴您它的用途,例如 Oracle 使用者用於 SGA 或 db2inst1 用於 DB2 緩衝區快取。
然後取決於流程,這會變得很棘手。運行同一程式檔案的所有進程都將共用唯讀代碼頁。如果進程由一個公共進程啟動,然後像 RDBMS 和 Apache 這樣的東西分叉,那麼它們也可能共享一些或幾乎所有資料和 sack 頁面。對於進程也需要但對我們來說基本上不可見的數十個庫來說也是如此。
由於這種未知的共享,通常情況下,如果將所有進程的所有記憶體加起來,它顯然比記憶體大得多。
如果您使用nmon
「t」表示頂級進程,然後使用「4」來排序進程大小,您將看到進程記憶體。
- 大小 KB = 磁碟上程式檔案的大小。
- 駐留集大小 = 它在記憶體中的大小(不包括仍在檔案系統中的頁面(如程式碼)和分頁磁碟上的某些部分)」。
- ResText列是Resident Set的程式碼頁
- ResData列是Resident Set的資料頁和堆疊頁
答案4
此topas
指令顯示實際記憶體和電腦記憶體的百分比。預設情況下,它在 AIX 上應該是可用的,並且它與 Linux 中的類似(但提供的資訊多得多)top
。
預設情況下,啟動topas
會顯示大量資訊(使用 CPU 的頂級進程、記憶體使用摘要等),按下h會顯示內聯幫助文字以及其他按鍵及其功能(例如,按c幾次將循環顯示CPU 使用情況的不同方式) 。