標簽: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 本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須注明文章來源,且在文章開頭明顯處給明鏈接,否則保留追究責任的權利。 《歡迎交流討論》 |