Linux 服務器監控


標簽: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

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

《歡迎交流討論》

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM