12 1 2 記憶體監控

2021-05-14 17:25:18 字數 4374 閱讀 2522

linux

系統的記憶體分為物理記憶體和虛擬記憶體兩種。物理記憶體是真實的,也就是物理記憶體條上的記憶體。而虛擬記憶體則是採用硬碟空間補充物理記憶體,將暫時不使用的記憶體頁寫到硬碟上以騰出更多的物理記憶體讓有需要的程序使用。當這些已被騰出的記憶體頁需要再次使用時才從硬碟(虛擬記憶體)中讀回記憶體。這一切對於使用者來說是透明的。通常對

linux

系統來說,虛擬記憶體就是

swap

分割槽。vmstat

(virtual meomory statistics

,虛擬記憶體統計)是

linux

中監控記憶體的常用工具,可對作業系統的虛擬記憶體、程序、

cpu等的整體情況進行監視。

vmstat

以及本章後面會介紹的

sar、

mpstat

和iostat

命令在預設情況下是不會被安裝的,使用者可以通過

red hat enterprise linux 5.2

安裝光碟中的「

sysstat-7.0.2-1.el5.i386.rpm

」軟體包進行安裝。

vmstat

命令格式如下:

vmstat [-a] [-n] [delay [ count]]

vmstat [-f] [-s] [-m]

vmstat [-s unit]

vmstat [-d]

vmstat [-p disk partition]

vmstat [-v]

例如,要以

5秒為時間間隔,連續收集

10次效能資料,命令如下:

# vmstat 5 10

procs

------memory---------swap-- ----io---- --system-- ---cpu----

rbswpdfreebuff cache

sisobiboincs us sy id wa st

000648819844 2429880014832 1143 361 41

9130

000648819844 2429880004 1139 340 40

9600

000648819852 24298000036

1144 339 41

9600

000648819852 2429880008 1139 321 40

9700

000648819856 24298400014 1141 346 40

9600

100648819856 2429880008 1139 332 32

9500

000648819856 2429880008 1139 323 41

9500

000648819864 24298000020 1142 343 32

9500

200648819864 2429880008 1139 322 40

9600

000648819872 24298000020 1142 362 41

9500

輸出結果中各字段的說明如表

12.1

所示。表

12.1vmstat

輸出結果說明 字

段 類別

說明 rprocs

(程序)

在執行佇列中等待的程序數 b

procs

(程序)

在等待io的程序數

swpd

memory

(記憶體)

已經使用的交換記憶體(kb)

free

memory

(記憶體)

空閒的物理記憶體(kb)

buff

memory

(記憶體)

用做緩衝區的記憶體數(kb)

cache

memory

(記憶體)

用做快取記憶體的記憶體數(kb)

siswap

(交換頁面)

從磁碟交換到記憶體的交換頁數量(

kb/秒) so

swap

(交換頁面)

從記憶體交換到磁碟的交換頁資料(

kb/秒)

續表 字段

類別 說明 bi

io(塊裝置)

傳送到塊裝置的塊數(塊/秒)

boio(塊裝置)

從塊裝置中接收的塊數(塊/秒)

insystem

(系統)

每秒的中斷數,包括時鐘中斷 cs

system

(系統)

每秒的上下文切換的次數 us

cpu(處理器)

使用者程序使用的

cpu時間(%)

sycpu(處理器)

系統程序使用的

cpu時間(%)

idcpu(處理器)

cpu空閒時間(%)

wacpu(處理器) 等待

io所消耗的

cpu時間(%)

stcpu(處理器)

從虛擬裝置中獲得的時間(%)

對於記憶體監控,需要關心的指標包括:

swpd

、free

、buff

、cache、si

和so,尤其需要重視的是

free、si

和so。很多人都會認為系統的空閒記憶體(

free

)少就代表系統效能有問題,其實並不是這樣的,這還要結合si和

so(記憶體和磁碟的頁面交換)兩個指標進行分析。正常來說,當物理記憶體能滿足系統需要的話(也就是說物理記憶體能足以存放所有程序的資料),那麼物理記憶體和磁碟(虛擬記憶體)是不應該存在頻繁的頁面交換操作的,只有當物理記憶體不能滿足需要時系統才會把記憶體中的資料交換到磁碟中。而由於磁碟的效能是比記憶體慢很多的,所以如果存在大量的頁面交換,那麼系統的效能必然會受到很大影響。下面來看乙個

vmstat

命令監控的例子。

# vmstat 5 10

procs -----memory---- ---swap-- -----io--

--system-- ----cpu----

r bswpdfreebuffcache

sisobi

bo incs

us sy id wa st

0 2 808788 193147 78936941420

3070

217451005 11892590

34 612 480

0 2 808788 162212 78893978920

95 0

12107 0

1801 2633

212 3

84 0

1 2 809268 88756

787171061424 130

28 183771131142 1694

35 3

88 0

1 2826284 17608

712401144180 100238025839163801528 1179 199 1261 0

2 1 854780 17688

341401208980 1

3108 25557309671764 2238 43 1316 280

0 8 867528 17588

323321226392 31 748 16524278081490 1634 41 10 7 430

4 2 877372 17596

323721227532 213 632 109123337678

93233 7 3

570

1 2 885980 17800

324081239160 204 235 12347126811033 982

40 12 2

460

4 2 900472 17980

324401253884 24 1034175214856 934

1730 48 1213260

3 2 900512 17620

324701255184 20 324148933456 144

43042 1714260

由上面的輸出結果可以看到:

q用做緩衝區(

buff

)和快速快取(

cache

)的物理記憶體不斷地增加,而空閒的物理記憶體(

free

)不斷地減少,證明系統中執行的程序正在不斷地消耗物理記憶體。

q已經使用的虛擬記憶體(

swpd

)不斷增加,而且存在著大量的頁面交換(si和

so),證明物理記憶體已經不能滿足系統需求,系統必須把物理記憶體的頁面交換到磁碟

中去。由此可以得到這樣的結論:該主機上的物理記憶體已經不能滿足系統執行的需要,記憶體已成為該系統效能的乙個瓶頸。

12 1 2直接管理記憶體

int pi new int pi指向乙個動態分配的,未初始化的無名物件 string ps new string 初始化為空string int pi new int 1024 初始值為1024 string ps new string 10,9 初始值為10個9 vector pv new ve...

監控cpu 記憶體

pid 1 獲取程序pid echo pid interval 1 設定採集間隔 while true do echo date y m d h m s proc memlog.txt cat proc pid status grep e vmrss proc memlog.txt 獲取記憶體占用 ...

nagios監控linux主機監控記憶體指令碼

閱讀目錄 回到頂部 工作包括兩部分監控端 一二三 和被監控端 四 回到頂部 nrpe.cfg中新增命令索引 1 command check used mem usr local nagios libexec check used mem.sh 80 90 說明 實際記憶體使用量超過80 警告 超過9...