linux 性能監視命令

在Linux下有很多系統性能分析工具,比較常見的有top、free、ps、time、timex、uptime等。下文將介紹幾個較爲重要的性能分析工具vmstat、iostat和sar及其使用。

  用vmstat監視內存使用情況

  vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操作系統的虛擬內存、進程、CPU活動進行監視。它是對系統的整體情況進行統計,不足之處是無法對某個進程進行深入分析。

  vmstat的語法如下:

  vmstat [-V] [-n] [delay [count]]

  其中,-V表示打印出版本信息;-n表示在週期性循環輸出時,輸出的頭部信息僅顯示一次;delay是兩次輸出之間的延遲時間;count是指按照這個時間間隔統計的次數。對於vmstat輸出各字段的含義,可運行man vmstat查看。

  用iostat監視I/O子系統情況

  iostat是I/O statistics(輸入/輸出統計)的縮寫,iostat工具將對系統的磁盤操作活動進行監視。它的特點是彙報磁盤活動統計情況,同時也會彙報出CPU使用情況。同vmstat一樣,iostat也有一個弱點,就是它不能對某個進程進行深入分析,僅對系統的整體情況進行分析。

  iostat的語法如下:


iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval [ count ] ]


  其中,-c爲彙報CPU的使用情況;-d爲彙報磁盤的使用情況;-k表示每秒按kilobytes字節顯示數據;-t爲打印彙報的時間;-v表示打印出版本信息和用法;-x device指定要統計的設備名稱,默認爲所有的設備;interval指每次統計間隔的時間;count指按照這個時間間隔統計的次數。

  iostat一般的輸出格式如下:

Linux 2.6.18-128.el5 (rac1)     08/20/2010

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.07    0.00    0.06    0.01    0.00   99.86

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               2.32         8.36        71.07    1526179   12969146
sda1              0.00         0.01         0.00       2231         10
sda2              1.04         2.61        41.72     476291    7613088
sda3              0.00         0.01         0.00       1756          0
sda4              0.00         0.00         0.00          9          0
sda5              1.28         5.73        29.35    1045323    5356048
sdb               8.46       112.82        52.52   20586955    9584357
sdb1              0.05         0.32         0.00      58933          0
sdb2              2.99         2.00         1.00     364212     181792
sdb3              5.07       110.47        39.65   20158185    7234830
sdb4              0.00         0.00         0.00          5          0
sdb5              0.35         0.00        11.88        893    2167735
sdb6              0.00         0.00         0.00        387 

 


對於輸出中各字段的含義,iostat的幫助中有詳細的說明。


vmstat 命令報告虛擬內存統計信息和CPU負荷:頁面調度,交換,任務交換,CPU利用率。命令的語法是:

vmstat [-cisS] [d1 d2 d3 d4] [interval [count]]

當不用選項時,vmstat顯示一條曲線表示自從系統啓動後活動的信息。如果指定interval(時間間隔),接下來的線是重複顯示最後的interval期間活動的情況,直到用戶中斷命令執行。當同時提供計數器時,統計信息按時間計數來顯示。

如果指定了一個磁盤名(如d1,d2,等等。),這些磁盤得到優先顯示。通常,系統上的前4個磁盤設備是顯示的,因爲只有四個設備能在一線條上顯示,這個選項允許性能分析員修改缺省顯示選項。(*磁盤名通常隨id,sd,xd,或xy (取決於類型和I/0界面)加一個數字,如id0,sd2,xd1等等命名而定。)

,vmstat 命令顯示若干字段信息:

procs 報表下面三種狀態的進程數:

r--在運行隊列中等候運行

b--被資源阻塞(I/0,頁面調度,等等.)

w--可運行但是被換出的

memory 報告虛擬內存和實存信息:

swap--以千字節爲單位的當前可用交換空間的數量

free--以千字節爲單位的頁自由表大小

page 報告每秒頁面調度活動數量的信息:

re-從自由表回收頁

mf--次要的錯誤;地址空間或硬件地址轉換錯誤

pi--頁入的千字節數

po -頁出的千字節數

fr- 釋放的千字節數

de--以千字節爲單位的可接受的短期內存不足數

sr--頁由時鐘算法掃描

disk 可以爲四個磁盤報告每秒磁盤I/O的數量

 

 

faults 報告每秒系統軟件中斷和硬件中斷的速率

in-設備中斷,不包括系統時鐘中斷

sy-系統調用

cs-CPU任務(上下文)交換

cpu-- CPU故障時間的百分比,在多處理器系統上,這是全部處理器的平均值:

us- 用戶時間

sy-- 系統時間

id-- 閒置時間

vmstat命令有四個可選標誌可供使用。如果機器有虛擬地址緩存-c標誌就改變輸出報告緩存刷新統計數據。報告包括自從系統啓動後每種緩存刷新全部總量。六個緩存類型是用戶,上下文,區域,段,頁,部分頁。

-i標誌 使輸出變爲報告中斷的數量。如果給出設備名,如d1,d2等,監控將在設備級*執行,(*注,參閱第十二章有關打開設備級監控的信息。)並報告每個給定設備的統計信息。

修改"普通"報告來顯示交換而非頁面調度活動的信息。這選項改變顯示的兩個字段:si(換入)和so(換出)替代了re和mf字段。

值得注意是,interval 和count選項對-i或-s選項是非法的。


vmstat 參數詳解

procs:

 

r-->在運行隊列中等待的進程數

b-->在等待io的進程數

w-->可以進入運行隊列但被替換的進程

memoy

swap-->現時可用的交換內存(k表示)

free-->空閒的內存(k表示)

 

pages

re--》回收的頁面

mf--》非嚴重錯誤的頁面

pi--》進入頁面數(k表示)

po--》出頁面數(k表示)

fr--》空餘的頁面數(k表示)

de--》提前讀入的頁面中的未命中數

sr--》通過時鐘算法掃描的頁面


disk 顯示每秒的磁盤操作。 s表示scsi盤,0表示盤號

fault 顯示每秒的中斷數

in--》設備中斷

sy--》系統中斷

cy--》cpu交換


cpu 表示cpu的使用狀態

cs--》用戶進程使用的時間

sy--》系統進程使用的時間

id--》cpu空閒的時間

FIELD DESCRIPTIONS

Procs

r: The number of processes waiting for run time.

b: The number of processes in uninterruptable sleep.

w: The number of processes swapped out but otherwise runnable.


Thisfield is calculated, but Linux never desperation swaps.

 

Memory

swpd: the amount of virtual memory used (kB).

free: the amount of idle memory (kB).

buff: the amount of memory used as buffers (kB).

Swap

si: Amount of memory swapped in from disk (kB/s). 虛擬內存的頁導入(從SWAP DISK導入RAM)

so: Amount of memory swapped to disk (kB/s). 虛擬內存的頁導出.

(從RAM到SWAP DISK)

IO

bi: Blocks sent to a block device (blocks/s).

bo: Blocks received from a block device (blocks/s).

System

in: The number of interrupts per second, including the clock.

cs: The number of context switches per second.

: CPU

These are percentages of total CPU time.

us: user time

sy: system time

id: idle time

如果 r經常大於 4 ,且id經常少於40,表示cpu的負荷很重。

如果pi,po 長期不等於0,表示內存不足。

如果disk 經常不等於0, 且在 b中的隊列 大於3, 表示 io性能不好。


由vmstat看服務器

說明:由於STATSPACK並不能獲取全面分析性能問題所需要的所有信息,所以需要擴展其收集服務器的統計信息。(本文環境REDHAT Linux7.2)

VMSTAT介紹

通過STATSPACK收集服務器信息,主要通過收集VMSTAT的信息來展現服務器狀況。VMSTAT工具是最常見的UNIX監控工具,可以展現給定時間間隔的服務器的狀態值。

一般VMSTAT工具的使用是通過兩個數字參數來完成的,第一個參數是採樣的時間間隔數,單位是秒,第二個參數是採樣的次數。如:


[oracle@brucelau oracle]$ vmstat 1 2

procs memory swap io system  CPU

r b w swpd free buff cache  si so bi bo in cs us sy id

1 0 0 0 271844 186052 255852 0 0 2 6 102 10 0 0 100

0 0 0 0 271844 186052 255852 0 0 0 0 104 11 0 0 100


(注:目前系統幾乎空閒,並且不同操作系統VMSTAT輸出內容有所不同)

目前說來,對於服務器監控有用處的度量主要有:

r(運行隊列)

pi(頁導入)

us(用戶CPU)

sy(系統CPU)

id(空閒)

通過VMSTAT識別CPU瓶頸

r(運行隊列)展示了正在執行和等待CPU資源的任務個數。當這個值超過了CPU數目,就會出現CPU瓶頸了。

得CPU個數的命令(LINUX環境):

cat /proc/cpuinfo|grep processor|wc -l

當r值超過了CPU個數,就會出現CPU瓶頸,解決辦法大體幾種:


1. 最簡單的就是增加CPU個數

2. 通過調整任務執行時間,如大任務放到系統不繁忙的情況下進行執行,進爾平衡系統任務

3. 調整已有任務的優先級

通過VMSTAT識別CPU滿負荷


首先需要聲明一點的是,vmstat中CPU的度量是百分比的。當us+sy的值接近100的時候,表示CPU正在接近滿負荷工作。但要注意的是,CPU滿負荷工作並不能說明什麼,UNIX總是試圖要CPU儘可能的繁忙,使得任務的吞吐量最大化。唯一能夠確定CPU瓶頸的還是r(運行隊列)的值。


通過VMSTAT識別RAM瓶頸

數據庫服務器都只有有限的RAM,出現內存爭用現象是Oracle的常見問題。

首先察看RAM的數量,命令如下(LINUX環境):

[root@brucelau root]#free

total used free shared buffers cached

Mem: 1027348 873312 154036 185736 187496 293964

-/+ buffers/cache: 391852 635496

Swap: 2096440 0 2096440


當然可以使用top等其他命令來顯示RAM。

當內存的需求大於RAM的數量,服務器啓動了虛擬內存機制,通過虛擬內存,可以將RAM段移到SWAP DISK的特殊磁盤段上,這樣會出現虛擬內存的頁導出和頁導入現象,頁導出並不能說明RAM瓶頸,虛擬內存系統經常會對內存段進行頁導出,但頁導入操作就表明了服務器需要更多的內存了,頁導入需要從SWAP DISK上將內存段複製回RAM,導致服務器速度變慢。

解決的辦法有幾種:

1. 最簡單的,加大RAM

2. 改小SGA,使得對RAM需求減少

3. 減少RAM的需求(如:減少PGA)

 


 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章