Linux 伺服器監控

pursuer.chen發表於2015-12-24

標籤:iostat/free/top/dstat/iotop

概述  

 文字主要講述使用linux自帶的幾個命令監控io、CPU、磁碟、記憶體、伺服器整體資訊等。

 

IO監控

iostat命令

主要用於監控系統裝置的IO負載情況

檢視命令幫助

iostat --help

[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ][ <裝置> [...] | ALL ] [ -p [ <裝置> [,...] | ALL ] ]

 

iostat

Linux 2.6.32-71.el6.x86_64 (localhost.localdomain) 2015年12月24日 _x86_64_(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           1.98    0.00    0.80    3.04    0.00   94.18

%user:程式處於使用者狀態所佔CPU時間百分比

%nice: 改變過優先順序的程式的佔用CPU的百分比.

%system:程式處於核心狀態所佔CPU時間百分比

%iowait:CPU等等IO操作所佔用的CPU百分比,當磁碟IO比較大的時候該值會增加。

%steal:分配給虛擬機器佔用的CPU百分比

%idle:CPU空閒時間的百分比

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda              17.78       128.39      1107.66    9968098   86000772

tps: 每秒鐘傳送到的I/O請求數(可以理解成每秒磁碟IO處理的請求,這樣可能更好理解)Blk_read /s: 每秒讀取的block數
Blk_wrtn/s: 每秒寫入的block數
Blk_read:   讀入的block總數
Blk_wrtn:  寫入的block總數

 

-c引數:

分成CPU的狀態,也就是上面的CPU部分

-d引數

分析磁碟裝置狀態,也就是上面的Device部分。

-n引數

分析檔案系統的狀態

Filesystem:              rBlk_nor/s   wBlk_nor/s   rBlk_dir/s   wBlk_dir/s   rBlk_svr/s   wBlk_svr/s     ops/s    rops/s    wops/s 

[-N或者-h]引數

和直接執行iostat的區別主要是device部分,這裡顯示的是裝置每秒的讀寫、讀寫位元組情況,預設是kB

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           2.06    0.00    0.82    3.09    0.00   94.03

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn

sda              18.20        65.63       556.45    5169933   43834154

kB_read/s:每秒從裝置讀的KB數

kB_wrtn/s:每秒寫入裝置的KB數

kB_read:每秒從裝置讀的KB位元組

kB_wrtn:每秒寫入裝置的KB位元組

[ -k | -m ]引數

是單位,分別是KB和MB,預設單位是KB,用來做磁碟分析的時候使用

例如iostat -d -M(以MB作為單位顯示)

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn

sda              18.65         0.06         0.55       5102      43654

-t引數

顯示的時候列印出時間

2015年12月24日 09時39分31秒

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

               2.07    0.00    0.83    3.17    0.00   93.94

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda              18.59       131.96      1128.88   10450530   89403980

[-v或-Z]引數

暫時沒發現什麼特別的功能

-x引數

最詳細的顯示CPU和裝置資訊

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           2.06    0.00    0.83    3.16    0.00   93.96

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util

sda               1.58   125.86    2.49   16.04   131.51  1124.71    67.80     0.41   22.29   2.69   4.98

其中CPU部分沒有什麼變化,這裡主要來看device部分:

rrqm/s:將讀入請求合併後,每秒傳送到裝置的讀入請求數.
wrqm/s:將寫入請求合併後,每秒傳送到裝置的寫入請求數.
r/s:每秒傳送到裝置的讀入請求數.
w/s:每秒傳送到裝置的寫入請求數.
rsec/s:每秒從裝置讀入的扇區數.
wsec/s:每秒向裝置寫入的扇區數.
rkB/s:每秒從裝置讀入的資料量,單位為K.
wkB/s:每秒向裝置寫入的資料量,單位為K.
avgrq-sz:傳送到裝置的請求的平均大小,單位是扇區.
avgqu-sz:傳送到裝置的請求的平均佇列長度.
await:I/O請求平均執行時間.包括髮送請求和執行的時間.單位是毫秒.
svctm:傳送到裝置的I/O請求的平均執行時間.單位是毫秒.
%uti:在I/O請求傳送到裝置期間,佔用CPU時間的百分比.用於顯示裝置的頻寬利用率.
當這個值接近100%時,表示裝置頻寬已經佔滿.

-P引數

分析指定的裝置:例如sda,sdb

iostat -p sda

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           2.05    0.00    0.82    3.13    0.00   93.99

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda              18.40       130.78      1116.56   10472250   89406772

sda1              0.01         0.07         0.00       5232         28

sda2             16.72       118.34      1089.36    9476202   87228408

sda3              0.36        12.36        27.20     989616    2178336

常見的用法:

顯示裝置和CPU狀態,每秒列印一次,並顯示時間

iostat -x -k -t 1

顯示裝置和CPU狀態,每秒顯示一次,顯示10次,並顯示時間

iostat -x -k -t 1 10

顯示裝置sda和CPU狀態,每秒顯示一次,顯示10次,並顯示時間

iostat -x -k -t -p sda 1 10

CPU監控

mpstat

mpstat命令主要用來分析CPU的效能,並且可以分析單個cpu的效能狀態。


mpstat -P ALL

 

%user:程式處於使用者狀態所佔CPU時間百分比

%nice: 改變過優先順序的程式的佔用CPU的百分比.

%system:程式處於核心狀態所佔CPU時間百分比

%iowait:CPU等等IO操作所佔用的CPU百分比,當磁碟IO比較大的時候該值會增加。

%steal:分配給虛擬機器佔用的CPU百分比

%idle:CPU空閒時間的百分比

記憶體監控

free命令

free
             total       used       free     shared    buffers     cached
Mem:      32830608   32501660     328948          0     285540   10956472
-/+ buffers/cache:   21259648   11570960
Swap:     16383992     216520   16167472

free:記憶體中剩餘未被使用的空間大小

buffers:檔案快取大小,linux本身就是一個檔案型系統,所以linux會為每個檔案進行快取用來加速檔案的查詢。

cached:頁快取,所有以頁為單位的快取都會被快取到這來,所以從這裡其實也可以大概看出伺服器的記憶體使用情況,因為大部分的記憶體都是以頁進行快取的 

total=used+free

total=(-buffers/cache)+(+buffers/cache)

-/+ buffers/cache:反應的是記憶體的實際使用情況

-buffers/cache:21259648=used-buffers-cached,這部分也是真正被使用掉的記憶體

+buffers/cache:11570960=(free+buffers+cached),這部分是可以直接拿來用的記憶體,所以看記憶體的剩餘可用情況可以參考+buffers/cache

檢視檔案/etc/proc/ meminfo

注意:還需要關注swap:used,如果swap:used使用很高那麼可能需要考慮記憶體是否夠用。

磁碟監控

df命令

檢視檔案cat /etc/proc/diskstats

程式監控

top命令

例:檢視mysql使用者程式

top -u mysql

top - 11:45:50 up 1 day, 23:39,  1 user,  load average: 0.04, 0.01, 0.00
Tasks: 185 total,   2 running, 183 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.2%sy,  0.0%ni, 99.5%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  32864496k total,  4749428k used, 28115068k free,   167268k buffers
Swap:  1048572k total,        0k used,  1048572k free,   259776k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  2285 mysql     20   0 27.5g 3.8g 8236 S  0.3 12.1   7:56.92 mysqld    

top這行資訊可以參考下面的uptime的解釋。load average分別表示5分鐘內的、10分鐘內的、15分鐘內排隊的程式數,只要第一個數字即5分鐘內的負載不大於5,系統就是健康的

tasks:185個程式總數,2個正在執行的程式,183個睡眠的程式,0個停止的程式,0個殭屍程式

cpu:0.1%us(使用者佔用), 0.2%sy(系統佔用), 0.0%ni, 99.5%id(空閒), 0.1%wa(等待輸入輸出的CPU時間百分比), 0.0%hi, 0.0%si, 0.0%st

Mem: 32864496k total(總記憶體), 4749428k used(已使用記憶體), 28115068k free(未使用的記憶體), 167268k buffers(核心快取)

Swap: 1048572k total(交換區總大小), 0k used(已使用), 1048572k free(未使用), 259776k cached(緩衝的交換區總量)

PID:程式ID

USER:使用者

PR:優先順序

NI:nice值。負值表示高優先順序,正值表示低優先順序

S:程式狀態(R:執行,S:睡眠,T:停止,Z:殭屍程式,D:不可中斷的睡眠狀態)

%CPU:佔用的CPU百分比

%MEM:佔用的記憶體百分比

TIME+:累計佔用的CPU時間

COMMAND:命令

 

程式資訊只列舉了一些重要的欄位,其它的欄位如果想了解可以去檢視資料。

這裡有每個程式的檔案:/etc/proc

注意:在top裡面除了關注每個程式的記憶體使用情況,還需要關注的就是{load average: 0.04, 0.01, 0.00}程式負載情況。

系統負載

uptime命令

10:18:23 up 22:43,  3 users,  load average: 0.00, 0.00, 0.79

  • 當前時間 10:18:23
  • 系統已執行的時間 22小時43分鐘
  • 當前線上使用者 3 user
  • 平均負載:0.00, 0.00, 0.79最近1分鐘、5分鐘、15分鐘系統的負載

檢視檔案

cat /proc/loadavg

0.00 0.00 0.70 1/317 41562

除了前3個數字表示平均程式數量外,後面的1個分數,分母表示系統程式總數,分子表示正在執行的程式數;最後一個數字表示最近執行的程式ID

 

系統平均負載被定義為在特定時間間隔內執行佇列中的平均程式數。如果一個程式滿足以下條件則其就會位於執行佇列中:

  • 它沒有在等待I/O操作的結果
  • 它沒有主動進入等待狀態(也就是沒有呼叫'wait')
  • 沒有被停止(例如:等待終止)

一般來說,每個CPU核心當前活動程式數不大於3,則系統執行表現良好!當然這裡說的是每個cpu核心,也就是如果你的主機是四核cpu的話,那麼只要uptime最後輸出的一串字元數值小於12即表示系統負載不是很嚴重.當然如果達到20,那就表示當前系統負載非常嚴重,估計開啟執行web指令碼非常緩慢.

uptime部分摘自:http://www.cnblogs.com/kaituorensheng/p/3602812.html

 

vmstat命令

該命令可以用來分析整個伺服器的基本情況,包括記憶體、交換分割槽、IO、system、cpu

vmstat

 

 

網路流量監控

可以使用nload工具來做網路流量監控,該工具可以動態的顯示流入和流出的網路流量

yum -y install nload

其它:

1.程式磁碟io寫入分析查詢

iotop命令

安裝方法1:

yum -y install iotop

安裝方法2:

wget http://guichaz.free.fr/iotop/files/iotop-0.4.4.tar.gz    
tar zxf iotop-0.4.4.tar.gz    
python setup.py build    
python setup.py install

 

 

 

 

總結

 linux系統自帶的這幾個命令做為日常監控使用還是挺不錯的,當然還有很多第三方工具也很不錯,比如監控IO的dstat工具,後面有時間會單獨講一下dstat工具的使用。

 

備註:

    作者:pursuer.chen

    部落格:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結,否則保留追究責任的權利。

《歡迎交流討論》

 

相關文章