2012年2月9日 星期四

Linux主要性能指標監控


1.CPU&進程

1.1 top命令

top - 20:07:00 up 186 days,  3:47,  3 users,  load average: 0.01, 0.02, 0.00
Tasks:  82 total,   1 running,  80 sleeping,   1 stopped,   0 zombie
Cpu(s):  3.7% us,  0.0% sy,  0.0% ni, 96.3% id,  0.0% wa,  0.0% hi,  0.0% si

1 load average
系統負載,即任務佇列的平均長度。三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。
2 進程情況
Tasks: 29 total
進程總數
1 running
正在運行的進程數
28 sleeping
睡眠的進程數
0 stopped
停止的進程數
0 zombie
僵屍進程數
3 cpu利用情況
多顆cpu的系統按"1"查看每顆cpu利用率
Cpu(s):
us
用戶空間佔用CPU百分比
sy
內核空間佔用CPU百分比
ni
使用者進程空間內改變過優先順序的進程佔用CPU百分比
id
空閒CPU百分比
wa
等待輸入輸出的CPU時間百分比
hi
硬體中斷 
si
軟體插斷
後面兩個參數我沒有深入瞭解過,也不是很明白.
關於top命令的詳細情況,請查閱top命令詳解文章


2.Memory

2.1 top 命令
Mem:   4149144k total,  3832668k used,   316476k free,   277592k buffers
Swap:  2096440k total,      144k used,  2096296k free,  2397028k cached

Mem:
記憶體利用率
total
實體記憶體總量
used
使用的實體記憶體總量
free
空閒記憶體總量
buffers
用作內核緩存的記憶體量
Swap:記憶體交換區利用率Swap
total
交換區總量
used
使用的交換區總量
free
空閒交換區總量
cached
緩衝的交換區總量。記憶體中的內容被換出到交換區,而後又被換入到記憶體,但使用過的交換區尚未被覆蓋,
該數值即為這些內容已存在於記憶體中的交換區的大小。相應的記憶體再次被換出時可不必再對交換區寫入。

2.2 free
free -m 記憶體資訊按照M單位顯示
                   total       used       free     shared    buffers     cached
Mem:          4051       3744        307          0        271       2340
-/+ buffers/cache:       1132       2919
Swap:         2047          0       2047

total 記憶體總數
used
已經使用的記憶體數
free
空閒的記憶體數
shared
當前已經廢棄不用,總是0
buffers
  Buffer緩存記憶體數,是塊設備的讀寫緩衝區
cached
  Page緩存記憶體數,檔案系統的cache
關係:total=used+free
第二部分(-/+ buffers/cache):
(-buffers/cache) used
記憶體數:(指的第一部分Mem行中的used - buffers-cached)
(+buffers/cache) free
記憶體數: (指的第一部分Mem行中的free + buffers+cached)
-buffers/cache
反映的是被程式實實在在吃掉的記憶體
+buffers/cache
反映的是可以挪用的記憶體總數
對應用程式來講是(-/+ buffers/cach).buffers/cached 是等同可用的,因為buffer/cached是為了提高程式執行的性能,當程式使用記憶體時,buffer/cached會很快地被使用。
關於buffercache的區別
A buffer is something that has yet to be "written" to disk
buffer
為有待寫入磁片的資料的緩衝區(供塊設備訪問,即隨機訪問資料片的設備)
A cache is something that has been "read" from the disk and stored for later use
cache
為已經被從磁片讀取和存儲有待使用的緩衝區
第三部分為虛擬記憶體緩衝區(swap),windows不同的是,linux在實體記憶體沒有耗盡的情況下,swap是不使用的.我曾經在做性能測試的過程中監控,發現伺服器物理free記憶體只剩下
15m時候,swap換入換出都仍然為0

2.3 vmstat n 動態監控記憶體使用情況(n為採樣間隔時間)
 在性能測試過程中,n最好不設置過小,以免耗費不必要的系統資源影響測試結果.

procs -----------memory-------------       -----swap---   ----io----   --system--  ------cpu----
 r  b   swpd    free    buff         cache        si   so         bi    bo    in     cs    us sy id wa
 1  0  144  312628  277612  2397268     0    0          1     9     1         0        2  0 98  0
 0  0  144  312628  277628  2397252     0    0          0    19    1006  869    5  0 95  0

procs:
r:
在運行佇列中等待的進程數
b:
在等待io的進程數

memory
swpd
切換到記憶體交換區的記憶體數量(k表示)。如果swpd的值不為0,或者比較大(比如超過了100m),代表曾經使用虛擬記憶體的數量,只要siso的值長期為0,說明資料從磁片到記憶體無換入換出,系統性能還是正常的.
free
當前的空閒頁面清單中記憶體數量(k表示)
buff
作為buffer cache的記憶體數量,一般對塊設備的讀寫才需要緩衝。
cache:
作為page cache的記憶體數量(k),一般作為檔案系統的cache,如果cache較大,說明用到cache的檔較多,如果此時IObi比較小,說明檔案系統效率比較好。

swap
si: 從磁片交換到記憶體的交換頁數量,單位:KB/
so: 從記憶體交換到磁片的交換頁數量,單位:KB/

io
bi: 發送到塊設備的塊數,單位:塊/
bo: 從塊設備接收到的塊數,單位:塊/
以上兩項數值高,表示磁片讀寫頻繁,排除是否程式在大量讀取檔。可以使用iostat進一步觀察磁片情況

system系統:
in: 每秒的中斷數,包括時鐘中斷。
cs: 每秒的環境(上下文)切換次數。
如以上兩項數值持續走高,說明程式引起的cpu調度出現問題,考慮程式處理邏輯的問題

cpu 
us
列顯示了使用者方式下所花費 CPU 時間的百分比。us的值比較高時,說明使用者進程消耗的cpu時間多,但是如果長期大於50%,需要考慮優化使用者的程式。
sy
列顯示了內核進程所花費的cpu時間的百分比。這裡us + sy的參考值為80%,如果us+sy 大於 80%說明可能存在CPU不足。
wa
列顯示了IO等待所佔用的CPU時間的百分比。這裡wa的參考值為30%,如果wa超過30%,說明IO等待嚴重,這可能是磁片大量隨機訪問造成的,也可能磁片或者磁片存取控制器的頻寬瓶頸造成的(主要是塊操作)

沒有留言: