vmstat與iostat詳解(zt)

tolywang發表於2007-11-14
Linux 在具有高穩定性、可靠性的同時,具有很好的可伸縮性和擴充套件性,能夠針對不同的應用和硬體環境調整,最佳化出滿足當前應用需要的最佳效能。因此企業在維護Linux系統、進行系統調優時,瞭解系統效能分析工具是至關重要的。

  在Linux下有很多系統效能分析工具,比較常見的有topfreepstimetimexuptime等。下文將介紹幾個較為重要的效能分析工具vmstatiostatsar及其使用。

 用vmstat監視記憶體使用情況

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

  vmstat的語法如下:

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

  其中,-V表示列印出版本資訊;-n表示在週期性迴圈輸出時,輸出的頭部資訊僅顯示一次;delay是兩次輸出之間的延遲時間;count是指按照這個時間間隔統計的次數。對於vmstat輸出各欄位的含義,可執行man vmstat檢視。

iostat監視I/O子系統情況

  iostatI/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.4.18-18smp (builder.linux.com) 2003年03月07日

avg-cpu: %user %nice %sys %idle

4.81 0.01 1.03 94.15

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

dev3-0 30.31 1117.68 846.52 16104536 12197374

dev3-1 7.06 229.61 40.40 3308486 582080

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

vmstat 命令報告虛擬記憶體統計資訊和CPU負荷:頁面排程,交換,任務交換,CPU利用率。命令的語法是:

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

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

如果指定了一個磁碟名(如d1d2,等等。),這些磁碟得到優先顯示。通常,系統上的前4個磁碟裝置是顯示的,因為只有四個裝置能在一線條上顯示,這個選項允許效能分析員修改預設顯示選項。(*磁碟名通常隨idsdxd,xy (取決於型別和I/0介面)加一個數字,如id0sd2xd1等等命名而定。)

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(換出)替代了remf欄位。

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

vmstat 引數詳解

procs:

r--&gt在執行佇列中等待的程式數

b--&gt在等待io的程式數

w--&gt可以進入執行佇列但被替換的程式

memoy

swap--&gt現時可用的交換記憶體(k表示)

free--&gt空閒的記憶體(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). 虛擬記憶體的頁匯出.

(RAMSWAP 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的負荷很重。

如果pipo 長期不等於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滿負荷

首先需要宣告一點的是,vmstatCPU的度量是百分比的。當ussy的值接近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

我們基本的瞭解了VMSTAT工作,下面是STATSPACK透過vmstat統計收集伺服器效能資料。

STATSPACK透過vmstat收集伺服器資訊

首先在perfstat使用者下建一個儲存伺服器資訊的表:如

建表:

create table stats$vmstat

(

start_date date, --系統時間

duration date, --時間間隔

server_name varchar2(20), --伺服器名稱

runque_waits number, --執行佇列資料

page_in number, --頁匯入資料

page_out number, --頁匯出資料

user_cpu number, --使用者cpu資料

system_cpu number, --系統cpu資料

idle_cpu number, --空閒cpu資料

wait_cpu number -等待cpu資料(只是aix存在)

)

tablespace perfstat;

然後,透過UNIX/LINUXshell變成,利用vmstat的結果來獲取相應的伺服器資訊,並且存放到表中。

關於shell程式設計,可能已經超出本文內容,並且誠實的說,本人並沒有shell程式設計的經驗,希望那位兄臺可以完成shell程式設計的內容,並勞駕mail給我共享一下,謝了先!!

附:

LINUXVMSTAT的幫助手冊:(man vmstat的結果)

VMSTAT(8) Linux Administrator's Manual VMSTAT(8)

NAME

vmstat - Report virtual memory statistics

SYNOPSIS

vmstat [-n] [delay [ count]]

vmstat[-V]

DESCRIPTION

vmstat reports information about processes, memory, paging, block IO, traps, and CPU activity.

The first report produced gives averages since the last reboot. Additional reports give information on a sam-

pling period of length delay. The process and memory reports are instantaneous in either case.

Options

The -n switch causes the header to be displayed only once rather than periodically.

delay is the delay between updates in seconds. If no delay is specified, only one report is printed with the

average values since boot.

count is the number of updates. If no count is specified and delay is defined, count defaults to infinity.

The -V switch results in displaying version information.

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. This

field 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).

so: Amount of memory swapped to disk (kB/s).

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

NOTES

vmstat does not require special permissions.

These reports are intended to help identify system bottlenecks. Linux vmstat does not count itself as a running process.

All linux blocks are currently 1k, except for CD-ROM blocks which are 2k.

FILES

/proc/meminfo

/proc/stat

/proc/*/stat

SEE ALSO

ps(1), top(1), free(1)

BUGS

Does not tabulate the block io per device or count the number of system calls.

AUTHOR

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-85008/,如需轉載,請註明出處,否則將追究法律責任。

相關文章