每天一個linux命(ming)令(46):vmstat命(ming)令
vmstat是Virtual Meomory Statistics(虛擬內存統計)的(de)(de)縮寫,可對操(cao)作系統的(de)(de)虛擬內存、進(jin)(jin)程(cheng)、CPU活(huo)動進(jin)(jin)行監控。他(ta)是對系統的(de)(de)整體(ti)情況(kuang)進(jin)(jin)行統計,不足之處是無法對某個(ge)進(jin)(jin)程(cheng)進(jin)(jin)行深入(ru)分析。vmstat 工具提供(gong)了(le)一種低開(kai)銷(xiao)的(de)(de)系統性能觀察方式(shi)。因(yin)為 vmstat 本(ben)身(shen)就是低開銷(xiao)工具,在非常高負荷(he)的服務器上,你(ni)需要查看并監控(kong)系統的健康情況,在控(kong)制窗口還是能夠使用vmstat 輸(shu)出結果。在學習(xi)vmstat命令前,我(wo)們先了解一下Linux系統中關于物理內存和虛擬(ni)內存(cun)相關信息(xi)。
物理內存和虛擬內存區別:
我們(men)知道,直(zhi)接從物(wu)(wu)理內(nei)(nei)存(cun)讀寫(xie)數(shu)據(ju)要比從硬盤讀寫(xie)數(shu)據(ju)要快的多,因此,我們(men)希望(wang)所有數(shu)據(ju)的讀取和寫(xie)入(ru)都在(zai)內(nei)(nei)存(cun)完(wan)成,而內(nei)(nei)存(cun)是有限的,這(zhe)樣就引(yin)出(chu)了物(wu)(wu)理內(nei)(nei)存(cun)與虛擬內(nei)(nei)存(cun)的概念。
物理(li)內(nei)存(cun)就是系統硬件提(ti)(ti)供的(de)內(nei)存(cun)大小,是真正的(de)內(nei)存(cun),相對于(yu)物理(li)內(nei)存(cun),在linux下還有一(yi)個虛擬(ni)(ni)(ni)內(nei)存(cun)的(de)概念,虛擬(ni)(ni)(ni)內(nei)存(cun)就是為(wei)了滿足物理(li)內(nei)存(cun)的(de)不(bu)足而提(ti)(ti)出(chu)的(de)策(ce)略,它(ta)是利(li)用(yong)磁盤空(kong)間虛擬(ni)(ni)(ni)出(chu)的(de)一(yi)塊(kuai)邏輯內(nei)存(cun),用(yong)作虛擬(ni)(ni)(ni)內(nei)存(cun)的(de)磁盤空(kong)間被稱為(wei)交換空(kong)間(Swap Space)。
作為物(wu)理(li)內(nei)存(cun)的擴展,linux會在物(wu)理(li)內(nei)存(cun)不足時,使用(yong)交(jiao)(jiao)換分區的虛擬內(nei)存(cun),更詳細的說,就是內(nei)核會將暫(zan)時不用(yong)的內(nei)存(cun)塊信(xin)息寫到交(jiao)(jiao)換空間(jian),這樣(yang)以來,物(wu)理(li)內(nei)存(cun)得到了釋放,這塊內(nei)存(cun)就可以用(yong)于其(qi)它(ta)目(mu)的,當需要用(yong)到原始的內(nei)容時,這些信(xin)息會被重(zhong)新從交(jiao)(jiao)換空間(jian)讀(du)入物(wu)理(li)內(nei)存(cun)。
linux的(de)內(nei)(nei)(nei)存(cun)管理(li)(li)采取(qu)的(de)是分(fen)頁存(cun)取(qu)機制,為(wei)了保(bao)證(zheng)物(wu)理(li)(li)內(nei)(nei)(nei)存(cun)能得到(dao)充分(fen)的(de)利用,內(nei)(nei)(nei)核(he)會在適當的(de)時候將物(wu)理(li)(li)內(nei)(nei)(nei)存(cun)中不經(jing)常(chang)(chang)使用的(de)數據塊自動交(jiao)換到(dao)虛擬內(nei)(nei)(nei)存(cun)中,而將經(jing)常(chang)(chang)使用的(de)信息保(bao)留到(dao)物(wu)理(li)(li)內(nei)(nei)(nei)存(cun)。
要(yao)深(shen)入了解linux內存(cun)運行機(ji)制(zhi),需要(yao)知道下面提(ti)到的幾個方面:
首先,Linux系(xi)統(tong)會(hui)不時(shi)(shi)的進行頁面交換操作,以(yi)保持盡可(ke)能多的空閑(xian)物理內存,即(ji)使并沒有什么(me)事(shi)情需要(yao)內存,Linux也會(hui)交換出暫時(shi)(shi)不用的內存頁面。這(zhe)可(ke)以(yi)避免等待交換所(suo)需的時(shi)(shi)間。
其次,linux進(jin)行頁面(mian)交(jiao)換(huan)是(shi)(shi)有(you)條件(jian)(jian)的(de)(de),不(bu)是(shi)(shi)所(suo)有(you)頁面(mian)在不(bu)用(yong)(yong)時(shi)(shi)(shi)都交(jiao)換(huan)到(dao)虛(xu)擬內(nei)(nei)(nei)(nei)存(cun)(cun)(cun)(cun),linux內(nei)(nei)(nei)(nei)核根據”最近(jin)最經常使用(yong)(yong)“算法,僅僅將一些不(bu)經常使用(yong)(yong)的(de)(de)頁面(mian)文(wen)件(jian)(jian)交(jiao)換(huan)到(dao)虛(xu)擬內(nei)(nei)(nei)(nei)存(cun)(cun)(cun)(cun),有(you)時(shi)(shi)(shi)我們會看到(dao)這(zhe)么(me)一個現象:linux物(wu)理內(nei)(nei)(nei)(nei)存(cun)(cun)(cun)(cun)還(huan)有(you)很(hen)多,但是(shi)(shi)交(jiao)換(huan)空間(jian)也使用(yong)(yong)了(le)很(hen)多。其實,這(zhe)并(bing)不(bu)奇怪,例如,一個占(zhan)用(yong)(yong)很(hen)大(da)內(nei)(nei)(nei)(nei)存(cun)(cun)(cun)(cun)的(de)(de)進(jin)程(cheng)運(yun)行時(shi)(shi)(shi),需要(yao)耗費很(hen)多內(nei)(nei)(nei)(nei)存(cun)(cun)(cun)(cun)資源,此(ci)時(shi)(shi)(shi)就(jiu)會有(you)一些不(bu)常用(yong)(yong)頁面(mian)文(wen)件(jian)(jian)被(bei)交(jiao)換(huan)到(dao)虛(xu)擬內(nei)(nei)(nei)(nei)存(cun)(cun)(cun)(cun)中,但后(hou)來這(zhe)個占(zhan)用(yong)(yong)很(hen)多內(nei)(nei)(nei)(nei)存(cun)(cun)(cun)(cun)資源的(de)(de)進(jin)程(cheng)結束并(bing)釋放了(le)很(hen)多內(nei)(nei)(nei)(nei)存(cun)(cun)(cun)(cun)時(shi)(shi)(shi),剛才被(bei)交(jiao)換(huan)出去的(de)(de)頁面(mian)文(wen)件(jian)(jian)并(bing)不(bu)會自動的(de)(de)交(jiao)換(huan)進(jin)物(wu)理內(nei)(nei)(nei)(nei)存(cun)(cun)(cun)(cun),除非有(you)這(zhe)個必要(yao),那么(me)此(ci)刻系(xi)統物(wu)理內(nei)(nei)(nei)(nei)存(cun)(cun)(cun)(cun)就(jiu)會空閑很(hen)多,同時(shi)(shi)(shi)交(jiao)換(huan)空間(jian)也在被(bei)使用(yong)(yong),就(jiu)出現了(le)剛才所(suo)說的(de)(de)現象了(le)。關于這(zhe)點,不(bu)用(yong)(yong)擔(dan)心(xin)什(shen)么(me),只要(yao)知道是(shi)(shi)怎么(me)一回事(shi)就(jiu)可以了(le)。
最后,交換(huan)空間(jian)的頁面(mian)在使(shi)用時會首(shou)先(xian)被(bei)交換(huan)到物理(li)內存(cun)(cun),如(ru)果(guo)此時沒有足夠的物理(li)內存(cun)(cun)來容納(na)這些(xie)頁面(mian),它們又會被(bei)馬(ma)上(shang)交換(huan)出(chu)去,如(ru)此以來,虛擬內存(cun)(cun)中可能沒有足夠空間(jian)來存(cun)(cun)儲(chu)這些(xie)交換(huan)頁面(mian),最終會導(dao)致linux出(chu)現假死機、服務異常等問題,linux雖然可以在一段時間(jian)內自(zi)行恢(hui)復,但(dan)是(shi)恢(hui)復后的系(xi)統已(yi)經基本不(bu)可用了。
因此,合理規劃和設(she)計linux內存的(de)使用(yong),是非常重要的(de)。
虛擬內存原理:
在系統中運行的(de)每個進(jin)程(cheng)(cheng)都(dou)需要使(shi)用到(dao)內(nei)存(cun)(cun),但不是每個進(jin)程(cheng)(cheng)都(dou)需要每時每刻使(shi)用系統分配(pei)的(de)內(nei)存(cun)(cun)空間。當系統運行所需內(nei)存(cun)(cun)超過實際的(de)物理內(nei)存(cun)(cun),內(nei)核(he)會釋放某些進(jin)程(cheng)(cheng)所占用但未使(shi)用的(de)部(bu)分或所有(you)物理內(nei)存(cun)(cun),將這部(bu)分資料(liao)存(cun)(cun)儲在磁(ci)盤上直到(dao)進(jin)程(cheng)(cheng)下一次調用,并將釋放出的(de)內(nei)存(cun)(cun)提供給有(you)需要的(de)進(jin)程(cheng)(cheng)使(shi)用。
在Linux內(nei)存管理中(zhong),主要是(shi)通過“調(diao)頁Paging”和“交(jiao)(jiao)換(huan)(huan)Swapping”來完成(cheng)上述(shu)的(de)(de)內(nei)存調(diao)度。調(diao)頁算法(fa)是(shi)將內(nei)存中(zhong)最近不(bu)常使(shi)用的(de)(de)頁面(mian)換(huan)(huan)到磁(ci)盤上,把活動頁面(mian)保(bao)留在內(nei)存中(zhong)供進(jin)程使(shi)用。交(jiao)(jiao)換(huan)(huan)技術是(shi)將整個(ge)進(jin)程,而不(bu)是(shi)部分頁面(mian),全部交(jiao)(jiao)換(huan)(huan)到磁(ci)盤上。
分(fen)頁(Page)寫入磁(ci)盤的(de)過程被稱(cheng)作(zuo)Page-Out,分(fen)頁(Page)從磁(ci)盤重新回到內存的(de)過程被稱(cheng)作(zuo)Page-In。當內核需要一(yi)個分(fen)頁時(shi)(shi),但發現(xian)此(ci)分(fen)頁不在物(wu)理內存中(因為已經被Page-Out了(le)),此(ci)時(shi)(shi)就發生(sheng)了(le)分(fen)頁錯誤(Page Fault)。
當(dang)系統(tong)內(nei)(nei)核(he)發現可運(yun)行(xing)(xing)內(nei)(nei)存變少時(shi)(shi),就會(hui)通過(guo)Page-Out來釋放一部分物理內(nei)(nei)存。經管(guan)Page-Out不(bu)(bu)是經常(chang)發生(sheng),但是如果Page-out頻繁不(bu)(bu)斷的(de)發生(sheng),直到當(dang)內(nei)(nei)核(he)管(guan)理分頁的(de)時(shi)(shi)間超(chao)過(guo)運(yun)行(xing)(xing)程式的(de)時(shi)(shi)間時(shi)(shi),系統(tong)效能會(hui)急(ji)劇下降。這時(shi)(shi)的(de)系統(tong)已經運(yun)行(xing)(xing)非(fei)常(chang)慢或進入暫(zan)停狀(zhuang)態,這種狀(zhuang)態亦被(bei)稱(cheng)作thrashing(顛簸)。
1.命令格式(shi):
vmstat [-a] [-n] [-S unit] [delay [ count]]
vmstat [-s] [-n] [-S unit]
vmstat [-m] [-n] [delay [ count]]
vmstat [-d] [-n] [delay [ count]]
vmstat [-p disk partition] [-n] [delay [ count]]
vmstat [-f]
vmstat [-V]
2.命令(ling)功(gong)能:
用來顯示(shi)虛擬內存的(de)信息
3.命令(ling)參數(shu):
-a:顯示活躍和(he)非活躍內存
-f:顯示從系(xi)統啟動至今的(de)fork數量(liang) 。
-m:顯示slabinfo
-n:只在(zai)開(kai)始時顯示一次各字(zi)段名稱。
-s:顯示內存相關統(tong)計信息及(ji)多種系統(tong)活(huo)動數量。
delay:刷新時間(jian)間(jian)隔。如果不指定,只顯示(shi)一條結果。
count:刷(shua)新次數。如(ru)果不指定(ding)刷(shua)新次數,但指定(ding)了刷(shua)新時(shi)(shi)間間隔,這時(shi)(shi)刷(shua)新次數為無窮(qiong)。
-d:顯示磁盤相(xiang)關統計信息。
-p:顯示指定磁盤分區統計信息
-S:使(shi)用指定單(dan)位顯(xian)示。參(can)數有 k 、K 、m 、M ,分別代表1000、1024、1000000、1048576字節(jie)(byte)。默(mo)認單(dan)位為K(1024 bytes)
-V:顯示vmstat版本信息。
4.使用實例:
實例1:顯(xian)示虛擬(ni)內存使用情況(kuang)
命(ming)令(ling):
vmstat
輸(shu)出:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 3029876 199616 690980 0 0 0 2 3 2 0 0 100 0 0
0 0 0 3029752 199616 690980 0 0 0 41 1009 39 0 0 100 0 0
0 0 0 3029752 199616 690980 0 0 0 3 1004 36 0 0 100 0 0
0 0 0 3029752 199616 690980 0 0 0 4 1004 36 0 0 100 0 0
0 0 0 3029752 199616 690980 0 0 0 6 1003 33 0 0 100 0 0
0 0 0 3029752 199616 690980 0 0 0 5 1003 33 0 0 100 0 0
說明:
字段說明:
Procs(進程):
r: 運行隊列中進程(cheng)數量
b: 等待IO的進程數量
Memory(內存):
swpd: 使(shi)用虛擬內存大小
free: 可用內存大小
buff: 用作緩沖(chong)的內存大小
cache: 用作緩存的(de)內(nei)存大小
Swap:
si: 每(mei)秒從(cong)交換區寫到內存的大小
so: 每秒寫入交換區的內(nei)存大小
IO:(現(xian)在(zai)的(de)Linux版本塊(kuai)的(de)大小(xiao)為(wei)1024bytes)
bi: 每秒讀取的(de)塊數
bo: 每秒寫入的塊數
系統:
in: 每秒中(zhong)斷數,包括(kuo)時鐘中(zhong)斷。
cs: 每秒上下(xia)文切(qie)換數。
CPU(以百分(fen)比表(biao)示):
us: 用戶進程執(zhi)行(xing)時間(user time)
sy: 系(xi)統(tong)進程執(zhi)行時間(system time)
id: 空閑(xian)時間(jian)(包括IO等(deng)待(dai)時間(jian)),中央處理器的空閑時(shi)間 。以百分比表(biao)示。
wa: 等待IO時間
備注(zhu): 如果(guo) r經(jing)常大于(yu) 4 ,且(qie)id經(jing)常少于(yu)40,表(biao)示cpu的(de)(de)負荷很重。如果(guo)pi,po 長期不等于(yu)0,表(biao)示內存不足(zu)。如果(guo)disk 經(jing)常不等于(yu)0, 且(qie)在(zai) b中(zhong)的(de)(de)隊列(lie) 大于(yu)3, 表(biao)示 io性(xing)(xing)能不好(hao)。Linux在(zai)具(ju)(ju)有高穩(wen)定性(xing)(xing)、可(ke)靠性(xing)(xing)的(de)(de)同時(shi),具(ju)(ju)有很好(hao)的(de)(de)可(ke)伸縮性(xing)(xing)和擴展(zhan)性(xing)(xing),能夠針對不同的(de)(de)應(ying)用和硬件(jian)環境調(diao)整,優化出滿足(zu)當(dang)前應(ying)用需要(yao)的(de)(de)最佳性(xing)(xing)能。因(yin)此(ci)企業在(zai)維護Linux系(xi)(xi)統(tong)、進行系(xi)(xi)統(tong)調(diao)優時(shi),了解系(xi)(xi)統(tong)性(xing)(xing)能分析(xi)工具(ju)(ju)是至(zhi)關重要(yao)的(de)(de)。
命令:
vmstat 5 5
表(biao)示在5秒時間內進行(xing)5次采(cai)樣。將得(de)到一個數(shu)據(ju)匯(hui)總他能夠反映真正的系(xi)統情況。
實例2:顯示活躍和非活躍內存(cun)
命(ming)令:
vmstat -a 2 5
輸出:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free inact active si so bi bo in cs us sy id wa st
0 0 0 3029752 387728 513008 0 0 0 2 3 2 0 0 100 0 0
0 0 0 3029752 387728 513076 0 0 0 0 1005 34 0 0 100 0 0
0 0 0 3029752 387728 513076 0 0 0 22 1004 36 0 0 100 0 0
0 0 0 3029752 387728 513076 0 0 0 0 1004 33 0 0 100 0 0
0 0 0 3029752 387728 513076 0 0 0 0 1003 32 0 0 100 0 0
[root@localhost ~]#
說明:
使用-a選項(xiang)顯(xian)示活躍(yue)和(he)非活躍(yue)內存時,所顯(xian)示的內容除增加inact和(he)active外,其(qi)他顯(xian)示內容與例(li)子1相同(tong)。
字段說明:
Memory(內(nei)存):
inact: 非活躍內(nei)存大小(當使用(yong)-a選項時顯示(shi))
active: 活躍(yue)的內存大小(當使用-a選項(xiang)時(shi)顯示)
實例3:查看系(xi)統已經(jing)fork了(le)多(duo)少次
命令:
vmstat -f
輸(shu)出:
[root@SCF1129 ~]# vmstat -f
12744849 forks
[root@SCF1129 ~]#
說明(ming):
這個數據是從/proc/stat中的processes字段里取得的
實例4:查看內存使用的詳細(xi)信息(xi)
命令:
vmstat -s
輸出:
4043760 total memory
1013884 used memory
513012 active memory
387728 inactive memory
3029876 free memory
199616 buffer memory
690980 swap cache
6096656 total swap
0 used swap
6096656 free swap
83587 non-nice user cpu ticks
132 nice user cpu ticks
278599 system cpu ticks
913344692 idle cpu ticks
814550 IO-wait cpu ticks
10547 IRQ cpu ticks
21261 softirq cpu ticks
0 stolen cpu ticks
310215 pages paged in
14254652 pages paged out
0 pages swapped in
0 pages swapped out
288374745 interrupts
146680577 CPU context switches
1351868832 boot time
367291 forks
說明:
這些信息的(de)分別來自于/proc/meminfo,/proc/stat和(he)/proc/vmstat。
實例5:查(cha)看(kan)磁盤的讀(du)/寫
命(ming)令(ling):
vmstat -d
輸出:
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
ram0 0 0 0 0 0 0 0 0 0 0
ram1 0 0 0 0 0 0 0 0 0 0
ram2 0 0 0 0 0 0 0 0 0 0
ram3 0 0 0 0 0 0 0 0 0 0
ram4 0 0 0 0 0 0 0 0 0 0
ram5 0 0 0 0 0 0 0 0 0 0
ram6 0 0 0 0 0 0 0 0 0 0
ram7 0 0 0 0 0 0 0 0 0 0
ram8 0 0 0 0 0 0 0 0 0 0
ram9 0 0 0 0 0 0 0 0 0 0
ram10 0 0 0 0 0 0 0 0 0 0
ram11 0 0 0 0 0 0 0 0 0 0
ram12 0 0 0 0 0 0 0 0 0 0
ram13 0 0 0 0 0 0 0 0 0 0
ram14 0 0 0 0 0 0 0 0 0 0
ram15 0 0 0 0 0 0 0 0 0 0
sda 33381 6455 615407 63224 2068111 1495416 28508288 15990289 0 10491
hdc 0 0 0 0 0 0 0 0 0 0
fd0 0 0 0 0 0 0 0 0 0 0
md0 0 0 0 0 0 0 0 0 0 0
[root@localhost ~]#
說明:
這些信(xin)息主(zhu)要來(lai)自于/proc/diskstats.
merged:表示一次來自于合并的寫/讀請(qing)求,一般(ban)系統會把多個(ge)連接(jie)/鄰近的讀/寫請(qing)求合并到一起來操作.
實例6:查看/dev/sda1磁盤的讀/寫
命(ming)令:
輸出:
[root@SCF1129 ~]# df
文件系(xi)統 1K-塊 已用 可(ke)用 已用% 掛載點
/dev/sda3 1119336548 27642068 1034835500 3% /tmpfs 32978376 0 32978376 0% /dev/shm
/dev/sda1 1032088 59604 920056 7% /boot
[root@SCF1129 ~]# vmstat -p /dev/sda1
sda1 reads read sectors writes requested writes
18607 4249978 6 48[root@SCF1129 ~]# vmstat -p /dev/sda3
sda3 reads read sectors writes requested writes
429350 35176268 28998789 980301488[root@SCF1129 ~]#
說明:
這些信息主要來自(zi)于(yu)/proc/diskstats。
reads:來自于這個分區的讀的次數。
read sectors:來自于這個分區的讀扇區的次數。
writes:來自(zi)于這個分區(qu)的(de)寫的(de)次數。
requested writes:來自于這個分區的寫請求次數。
實例7:查看系統的slab信息(xi)
命令(ling):
vmstat -m
輸出:
Cache Num Total Size Pages
ip_conntrack_expect 0 0 136 28
ip_conntrack 3 13 304 13
ip_fib_alias 11 59 64 59
ip_fib_hash 11 59 64 59
AF_VMCI 0 0 960 4
bio_map_info 100 105 1064 7
dm_mpath 0 0 1064 7
jbd_4k 0 0 4096 1
dm_uevent 0 0 2608 3
dm_tio 0 0 24 144
dm_io 0 0 48 77
scsi_cmd_cache 10 10 384 10
sgpool-128 32 32 4096 1
sgpool-64 32 32 2048 2
sgpool-32 32 32 1024 4
sgpool-16 32 32 512 8
sgpool-8 45 45 256 15
scsi_io_context 0 0 112 34
ext3_inode_cache 51080 51105 760 5
ext3_xattr 36 88 88 44
journal_handle 18 144 24 144
journal_head 56 80 96 40
revoke_table 4 202 16 202
revoke_record 0 0 32 112
uhci_urb_priv 0 0 56 67
UNIX 13 33 704 11
flow_cache 0 0 128 30
msi_cache 33 59 64 59
cfq_ioc_pool 14 90 128 30
cfq_pool 12 90 216 18
crq_pool 16 96 80 48
deadline_drq 0 0 80 48
as_arq 0 0 96 40
mqueue_inode_cache 1 4 896 4
isofs_inode_cache 0 0 608 6
hugetlbfs_inode_cache 1 7 576 7
Cache Num Total Size Pages
ext2_inode_cache 0 0 720 5
ext2_xattr 0 0 88 44
dnotify_cache 0 0 40 92
dquot 0 0 256 15
eventpoll_pwq 3 53 72 53
eventpoll_epi 3 20 192 20
inotify_event_cache 0 0 40 92
inotify_watch_cache 1 53 72 53
kioctx 0 0 320 12
kiocb 0 0 256 15
fasync_cache 0 0 24 144
shmem_inode_cache 254 290 768 5
posix_timers_cache 0 0 128 30
uid_cache 0 0 128 30
ip_mrt_cache 0 0 128 30
tcp_bind_bucket 3 112 32 112
inet_peer_cache 0 0 128 30
secpath_cache 0 0 64 59
xfrm_dst_cache 0 0 384 10
ip_dst_cache 5 10 384 10
arp_cache 1 15 256 15
RAW 3 5 768 5
UDP 5 10 768 5
tw_sock_TCP 0 0 192 20
request_sock_TCP 0 0 128 30
TCP 4 5 1600 5
blkdev_ioc 14 118 64 59
blkdev_queue 20 30 1576 5
blkdev_requests 13 42 272 14
biovec-256 7 7 4096 1
biovec-128 7 8 2048 2
biovec-64 7 8 1024 4
biovec-16 7 15 256 15
biovec-4 7 59 64 59
biovec-1 23 202 16 202
bio 270 270 128 30
utrace_engine_cache 0 0 64 59
Cache Num Total Size Pages
utrace_cache 0 0 64 59
sock_inode_cache 33 48 640 6
skbuff_fclone_cache 7 7 512 7
skbuff_head_cache 319 390 256 15
file_lock_cache 1 22 176 22
Acpi-Operand 4136 4248 64 59
Acpi-ParseExt 0 0 64 59
Acpi-Parse 0 0 40 92
Acpi-State 0 0 80 48
Acpi-Namespace 2871 2912 32 112
delayacct_cache 81 295 64 59
taskstats_cache 4 53 72 53
proc_inode_cache 1427 1440 592 6
sigqueue 0 0 160 24
radix_tree_node 13166 13188 536 7
bdev_cache 23 24 832 4
sysfs_dir_cache 5370 5412 88 44
mnt_cache 26 30 256 15
inode_cache 2009 2009 560 7
dentry_cache 60952 61020 216 18
filp 479 1305 256 15
names_cache 3 3 4096 1
avc_node 14 53 72 53
selinux_inode_security 994 1200 80 48
key_jar 2 20 192 20
idr_layer_cache 74 77 528 7
buffer_head 164045 164800 96 40
mm_struct 51 56 896 4
vm_area_struct 1142 1958 176 22
fs_cache 35 177 64 59
files_cache 36 55 768 5
signal_cache 72 162 832 9
sighand_cache 68 84 2112 3
task_struct 76 80 1888 2
anon_vma 458 864 24 144
pid 83 295 64 59
shared_policy_node 0 0 48 77
Cache Num Total Size Pages
numa_policy 37 144 24 144
size-131072(DMA) 0 0 131072 1
size-131072 0 0 131072 1
size-65536(DMA) 0 0 65536 1
size-65536 1 1 65536 1
size-32768(DMA) 0 0 32768 1
size-32768 2 2 32768 1
size-16384(DMA) 0 0 16384 1
size-16384 5 5 16384 1
size-8192(DMA) 0 0 8192 1
size-8192 7 7 8192 1
size-4096(DMA) 0 0 4096 1
size-4096 110 111 4096 1
size-2048(DMA) 0 0 2048 2
size-2048 602 602 2048 2
size-1024(DMA) 0 0 1024 4
size-1024 344 352 1024 4
size-512(DMA) 0 0 512 8
size-512 433 480 512 8
size-256(DMA) 0 0 256 15
size-256 1139 1155 256 15
size-128(DMA) 0 0 128 30
size-64(DMA) 0 0 64 59
size-64 5639 5782 64 59
size-32(DMA) 0 0 32 112
size-128 801 930 128 30
size-32 3005 3024 32 112
kmem_cache 137 137 2688 1
這組(zu)信息(xi)來(lai)自于/proc/slabinfo。
slab:由于內(nei)核會有(you)許(xu)多小對象,這些對(dui)象(xiang)構造銷(xiao)毀(hui)十(shi)分頻繁,比如(ru)i-node,dentry,這些對(dui)象(xiang)如果每次構建的時候就向內存要一個頁(4kb),而其實(shi)只有幾個字節,這(zhe)樣(yang)就會非常(chang)浪費,為了解(jie)決這(zhe)個(ge)問題,就(jiu)引入了一種新的(de)機制來處理在同一個頁框(kuang)中如何分配小存(cun)儲區,而(er)slab可以對(dui)(dui)小對(dui)(dui)象進行分(fen)配(pei),這樣(yang)就不用為每一個對(dui)(dui)象分(fen)配(pei)頁框,從而節(jie)省了空間(jian),內核對一些小對象創建(jian)析構很(hen)頻繁,slab對這些小對象進行緩沖,可以重復利用,減(jian)少內(nei)存(cun)分配次數。
關注 熵減黑客 ,一起學習成長
