1. Linux的實時監測命令(watch):
watch 是一個很是實用的命令,能夠幫你實時監測一個命令的運行結果,免得一遍又一遍的手動運行。該命令最爲經常使用的兩個選項是-d和-n,其中-n表示間隔多少秒執行一次"command",-d表示高亮發生變化的位置。下面列舉幾個在watch中經常使用的實時監視命令:
/> watch -d -n 1 'who' #每隔一秒執行一次who命令,以監視服務器當前用戶登陸的情況
Every 1.0s: who Sat Nov 12 12:37:18 2011
stephen tty1 2011-11-11 17:38 (:0)
stephen pts/0 2011-11-11 17:39 (:0.0)
root pts/1 2011-11-12 10:01 (192.168.149.1)
root pts/2 2011-11-12 11:41 (192.168.149.1)
root pts/3 2011-11-12 12:11 (192.168.149.1)
stephen pts/4 2011-11-12 12:22 (:0.0)
此時經過其餘Linux客戶端工具以root的身份登陸當前Linux服務器,再觀察watch命令的運行變化。
Every 1.0s: who Sat Nov 12 12:41:09 2011
stephen tty1 2011-11-11 17:38 (:0)
stephen pts/0 2011-11-11 17:39 (:0.0)
root pts/1 2011-11-12 10:01 (192.168.149.1)
root pts/2 2011-11-12 11:41 (192.168.149.1)
root pts/3 2011-11-12 12:40 (192.168.149.1)
stephen pts/4 2011-11-12 12:22 (:0.0)
root pts/5 2011-11-12 12:41 (192.168.149.1)
最後一行中被高亮的用戶爲新登陸的root用戶。此時按CTRL + C能夠退出正在執行的watch監控進程。
#watch能夠同時運行多個命令,命令間用分號分隔。
#如下命令監控磁盤的使用情況,以及當前目錄下文件的變化情況,包括文件的新增、刪除和文件修改日期的更新等。
/> watch -d -n 1 'df -h; ls -l'
Every 1.0s: df -h; ls -l Sat Nov 12 12:55:00 2011
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 5.8G 3.3G 2.2G 61% /
tmpfs 504M 420K 504M 1% /dev/shm
total 20
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 root root 183 Nov 11 08:02 users
-rw-r--r--. 1 root root 279 Nov 11 08:45 users2
此時經過另外一個Linux控制檯窗口,在watch監視的目錄下,如/home/stephen/test,執行下面的命令
/> touch aa #在執行該命令以後,另外一個執行watch命令的控制檯將有以下變化
Every 1.0s: df -h; ls -l Sat Nov 12 12:57:08 2011
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 5.8G 3.3G 2.2G 61% /
tmpfs 504M 420K 504M 1% /dev/shm
total 20
-rw-r--r--. 1 root root 0 Nov 12 12:56 aa
-rw-r--r--. 1 root root 0 Nov 12 10:02 datafile3
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 root root 183 Nov 11 08:02 users
-rw-r--r--. 1 root root 279 Nov 11 08:45 users2
其中黃色高亮的部分,爲touch aa命令執行以後watch輸出的高亮變化部分。linux
2. 查看當前系統內存使用情況(free):
free命令有如下幾個經常使用選項:ios
選項 | 說明 |
-b | 以字節爲單位顯示數據。 |
-k | 以千字節(KB)爲單位顯示數據(缺省值)。 |
-m | 以兆(MB)爲單位顯示數據。 |
-s delay | 該選項將使free持續不斷的刷新,每次刷新之間的間隔爲delay指定的秒數,若是含有小數點,將精確到毫秒,如0.5爲500毫秒,1爲一秒。 |
free命令輸出的表格中包含如下幾列:緩存
列名 | 說明 |
total | 總計物理內存的大小。 |
used | 已使用的內存數量。 |
free | 可用的內存數量。 |
Shared | 多個進程共享的內存總額。 |
Buffers/cached | 磁盤緩存的大小。 |
見如下具體示例和輸出說明:
/> free -k
total used free shared buffers cached
Mem: 1031320 671776 359544 0 88796 352564
-/+ buffers/cache: 230416 800904
Swap: 204792 0 204792
對於free命令的輸出,咱們只需關注紅色高亮的輸出行和綠色高亮的輸出行,見以下具體解釋:
紅色輸出行:該行使從操做系統的角度來看待輸出數據的,used(671776)表示內核(Kernel)+Applications+buffers+cached。free(359544)表示系統還有多少內存可供使用。
綠色輸出行:該行則是從應用程序的角度來看輸出數據的。其free = 操做系統used + buffers + cached,既:
800904 = 359544 + 88796 + 352564
/> free -m
total used free shared buffers cached
Mem: 1007 656 351 0 86 344
-/+ buffers/cache: 225 782
Swap: 199 0 199
/> free -k -s 1.5 #以千字節(KB)爲單位顯示數據,同時每隔1.5刷新輸出一次,直到按CTRL+C退出
total used free shared buffers cached
Mem: 1007 655 351 0 86 344
-/+ buffers/cache: 224 782
Swap: 199 0 199
total used free shared buffers cached
Mem: 1007 655 351 0 86 344
-/+ buffers/cache: 224 782
Swap: 199 0 199
3. CPU的實時監控工具(mpstat):
該命令主要用於報告當前系統中全部CPU的實時運行情況。
#該命令將每隔2秒輸出一次CPU的當前運行情況信息,一共輸出5次,若是沒有第二個數字參數,mpstat將每隔兩秒執行一次,直到按CTRL+C退出。
/> mpstat 2 5
Linux 2.6.32-71.el6.i686 (Stephen-PC) 11/12/2011 _i686_ (1 CPU)
04:03:00 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
04:03:02 PM all 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 99.50
04:03:04 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
04:03:06 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
04:03:08 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
04:03:10 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Average: all 0.00 0.00 0.10 0.00 0.00 0.00 0.00 0.00 99.90
第一行的末尾給出了當前系統中CPU的數量。後面的表格中則輸出了系統當前CPU的使用情況,如下爲每列的含義:服務器
列名 | 說明 |
%user | 在internal時間段裏,用戶態的CPU時間(%),不包含nice值爲負進程 (usr/total)*100 |
%nice | 在internal時間段裏,nice值爲負進程的CPU時間(%) (nice/total)*100 |
%sys | 在internal時間段裏,內核時間(%) (system/total)*100 |
%iowait | 在internal時間段裏,硬盤IO等待時間(%) (iowait/total)*100 |
%irq | 在internal時間段裏,硬中斷時間(%) (irq/total)*100 |
%soft | 在internal時間段裏,軟中斷時間(%) (softirq/total)*100 |
%idle | 在internal時間段裏,CPU除去等待磁盤IO操做外的由於任何緣由而空閒的時間閒置時間(%) (idle/total)*100 |
計算公式:
total_cur=user+system+nice+idle+iowait+irq+softirq
total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq
user=user_cur – user_pre
total=total_cur-total_pre
其中_cur 表示當前值,_pre表示interval時間前的值。上表中的全部值可取到兩位小數點。
/> mpstat -P ALL 2 3 #-P ALL表示打印全部CPU的數據,這裏也能夠打印指定編號的CPU數據,如-P 0(CPU的編號是0開始的)
Linux 2.6.32-71.el6.i686 (Stephen-PC) 11/12/2011 _i686_ (1 CPU)
04:12:54 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
04:12:56 PM all 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 99.50
04:12:56 PM 0 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 99.50
04:12:56 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
04:12:58 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
04:12:58 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
04:12:58 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
04:13:00 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
04:13:00 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
Average: all 0.00 0.00 0.17 0.00 0.00 0.00 0.00 0.00 99.83
Average: 0 0.00 0.00 0.17 0.00 0.00 0.00 0.00 0.00 99.83
4. 虛擬內存的實時監控工具(vmstat):
vmstat命令用來得到UNIX系統有關進程、虛存、頁面交換空間及CPU活動的信息。這些信息反映了系統的負載狀況。vmstat首次運行時顯示自系統啓動開始的各項統計信息,以後運行vmstat將顯示自上次運行該命令之後的統計信息。用戶能夠經過指定統計的次數和時間來得到所需的統計信息。
/> vmstat 1 3 #這是vmstat最爲經常使用的方式,其含義爲每隔1秒輸出一條,一共輸出3條後程序退出。
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 531760 67284 231212 108 0 0 260 111 148 1 5 86 8 0
0 0 0 531752 67284 231212 0 0 0 0 33 57 0 1 99 0 0
0 0 0 531752 67284 231212 0 0 0 0 40 73 0 0 100 0 0
/> vmstat 1 #其含義爲每隔1秒輸出一條,直到按CTRL+C後退出。
下面將給出輸出表格中每一列的含義說明:
有關進程的信息有:(procs)
r: 在就緒狀態等待的進程數。
b: 在等待狀態等待的進程數。
有關內存的信息有:(memory)
swpd: 正在使用的swap大小,單位爲KB。
free: 空閒的內存空間。
buff: 已使用的buff大小,對塊設備的讀寫進行緩衝。
cache: 已使用的cache大小,文件系統的cache。
有關頁面交換空間的信息有:(swap)
si: 交換內存使用,由磁盤調入內存。
so: 交換內存使用,由內存調入磁盤。
有關IO塊設備的信息有:(io)
bi: 從塊設備讀入的數據總量(讀磁盤) (KB/s)
bo: 寫入到塊設備的數據總理(寫磁盤) (KB/s)
有關故障的信息有:(system)
in: 在指定時間內的每秒中斷次數。
sy: 在指定時間內每秒系統調用次數。
cs: 在指定時間內每秒上下文切換的次數。
有關CPU的信息有:(cpu)
us: 在指定時間間隔內CPU在用戶態的利用率。
sy: 在指定時間間隔內CPU在覈心態的利用率。
id: 在指定時間間隔內CPU空閒時間比。
wa: 在指定時間間隔內CPU由於等待I/O而空閒的時間比。
vmstat 能夠用來肯定一個系統的工做是受限於CPU仍是受限於內存:若是CPU的sy和us值相加的百分比接近100%,或者運行隊列(r)中等待的進程數老是不等於0,且常常大於4,同時id也常常小於40,則該系統受限於CPU;若是bi、bo的值老是不等於0,則該系統受限於內存。
5. 設備IO負載的實時監控工具(iostat):
iostat主要用於監控系統設備的IO負載狀況,iostat首次運行時顯示自系統啓動開始的各項統計信息,以後運行iostat將顯示自上次運行該命令之後的統計信息。用戶能夠經過指定統計的次數和時間來得到所需的統計信息。
其中該命令中最爲經常使用的使用方式以下:
/> iostat -d 1 3 #僅顯示設備的IO負載,其中每隔1秒刷新並輸出結果一次,輸出3次後iostat退出。
Linux 2.6.32-71.el6.i686 (Stephen-PC) 11/16/2011 _i686_ (1 CPU)
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 5.35 258.39 26.19 538210 54560
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.00 0.00 0.00 0 0
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.00 0.00 0.00 0 0
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.00 0.00 0.00 0 0
/> iostat -d 1 #和上面的命令同樣,也是每隔1秒刷新並輸出一次,可是該命令將一直輸出,直到按CTRL+C退出。
下面將給出輸出表格中每列的含義:工具
列名 | 說明 |
Blk_read/s | 每秒塊(扇區)讀取的數量。 |
Blk_wrtn/s | 每秒塊(扇區)寫入的數量。 |
Blk_read | 總共塊(扇區)讀取的數量。 |
Blk_wrtn | 總共塊(扇區)寫入的數量。 |
iostat還有一個比較經常使用的選項-x,該選項將用於顯示和io相關的擴展數據。
/> iostat -dx 1 3
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 5.27 1.31 2.82 1.14 189.49 19.50 52.75 0.53 133.04 10.74 4.26
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
還能夠在命令行參數中指定要監控的設備名,如:
/> iostat -dx sda 1 3 #指定監控的設備名稱爲sda,該命令的輸出結果和上面命令徹底相同。
下面給出擴展選項輸出的表格中每列的含義:操作系統
列名 | 說明 |
rrqm/s | 隊列中每秒鐘合併的讀請求數量 |
wrqm/s | 隊列中每秒鐘合併的寫請求數量 |
r/s | 每秒鐘完成的讀請求數量 |
w/s | 每秒鐘完成的寫請求數量 |
rsec/s | 每秒鐘讀取的扇區數量 |
wsec/s | 每秒鐘寫入的扇區數量 |
avgrq-sz | 平均請求扇區的大小 |
avgqu-sz | 平均請求隊列的長度 |
await | 平均每次請求的等待時間 |
util | 設備的利用率 |
下面是關鍵列的解釋:
util是設備的利用率。若是它接近100%,一般說明設備能力趨於飽和。
await是平均每次請求的等待時間。這個時間包括了隊列時間和服務時間,也就是說,通常狀況下,await大於svctm,它們的差值越小,則說明隊列時間越短,反之差值越大,隊列時間越長,說明系統出了問題。
avgqu-sz是平均請求隊列的長度。毫無疑問,隊列長度越短越好。
6. 當前運行進程的實時監控工具(pidstat):
pidstat主要用於監控所有或指定進程佔用系統資源的狀況,如CPU,內存、設備IO、任務切換、線程等。pidstat首次運行時顯示自系統啓動開始的各項統計信息,以後運行pidstat將顯示自上次運行該命令之後的統計信息。用戶能夠經過指定統計的次數和時間來得到所需的統計信息。
在正常的使用,一般都是經過在命令行選項中指定待監控的pid,以後在經過其餘具體的參數來監控與該pid相關係統資源信息。命令行
選項 | 說明 |
-l | 顯示該進程和CPU相關的信息(command列中能夠顯示命令的完整路徑名和命令的參數)。 |
-d | 顯示該進程和設備IO相關的信息。 |
-r | 顯示該進程和內存相關的信息。 |
-w | 顯示該進程和任務時間片切換相關的信息。 |
-t | 顯示在該進程內正在運行的線程相關的信息。 |
-p | 後面緊跟着帶監控的進程id或ALL(表示全部進程),如不指定該選項,將監控當前系統正在運行的全部進程。 |
#監控pid爲1(init)的進程的CPU資源使用狀況,其中每隔3秒刷新並輸出一次,3次後程序退出。
/> pidstat -p 1 2 3 -l
07:18:58 AM PID %usr %system %guest %CPU CPU Command
07:18:59 AM 1 0.00 0.00 0.00 0.00 0 /sbin/init
07:19:00 AM 1 0.00 0.00 0.00 0.00 0 /sbin/init
07:19:01 AM 1 0.00 0.00 0.00 0.00 0 /sbin/init
Average: 1 0.00 0.00 0.00 0.00 - /sbin/init
%usr: 該進程在用戶態的CPU使用率。
%system:該進程在內核態(系統級)的CPU使用率。
%CPU: 該進程的總CPU使用率,若是在SMP環境下,該值將除以CPU的數量,以表示每CPU的數據。
CPU: 該進程所依附的CPU編號(0表示第一個CPU)。
#監控pid爲1(init)的進程的設備IO資源負載狀況,其中每隔2秒刷新並輸出一次,3次後程序退出。
/> pidstat -p 1 2 3 -d
07:24:49 AM PID kB_rd/s kB_wr/s kB_ccwr/s Command
07:24:51 AM 1 0.00 0.00 0.00 init
07:24:53 AM 1 0.00 0.00 0.00 init
07:24:55 AM 1 0.00 0.00 0.00 init
Average: 1 0.00 0.00 0.00 init
kB_rd/s: 該進程每秒的字節讀取數量(KB)。
kB_wr/s: 該進程每秒的字節寫出數量(KB)。
kB_ccwr/s: 該進程每秒取消磁盤寫入的數量(KB)。
#監控pid爲1(init)的進程的內存使用狀況,其中每隔2秒刷新並輸出一次,3次後程序退出。
/> pidstat -p 1 2 3 -r
07:29:56 AM PID minflt/s majflt/s VSZ RSS %MEM Command
07:29:58 AM 1 0.00 0.00 2828 1368 0.13 init
07:30:00 AM 1 0.00 0.00 2828 1368 0.13 init
07:30:02 AM 1 0.00 0.00 2828 1368 0.13 init
Average: 1 0.00 0.00 2828 1368 0.13 init
%MEM: 該進程的內存使用百分比。
#監控pid爲1(init)的進程任務切換狀況,其中每隔2秒刷新並輸出一次,3次後程序退出。
/> pidstat -p 1 2 3 -w
07:32:15 AM PID cswch/s nvcswch/s Command
07:32:17 AM 1 0.00 0.00 init
07:32:19 AM 1 0.00 0.00 init
07:32:21 AM 1 0.00 0.00 init
Average: 1 0.00 0.00 init
cswch/s: 每秒任務主動(自願的)切換上下文的次數。主動切換是指當某一任務處於阻塞等待時,將主動讓出本身的CPU資源。
nvcswch/s: 每秒任務被動(不自願的)切換上下文的次數。被動切換是指CPU分配給某一任務的時間片已經用完,所以將強迫該進程讓出CPU的執行權。
#監控pid爲1(init)的進程及其內部線程的內存(r選項)使用狀況,其中每隔2秒刷新並輸出一次,3次後程序退出。須要說明的是,若是-t選項後面不加任何其餘選項,缺省監控的爲CPU資源。結果中黃色高亮的部分表示進程和其內部線程是樹狀結構的顯示方式。
/> pidstat -p 1 2 3 -tr
Linux 2.6.32-71.el6.i686 (Stephen-PC) 11/16/2011 _i686_ (1 CPU)
07:37:04 AM TGID TID minflt/s majflt/s VSZ RSS %MEM Command
07:37:06 AM 1 - 0.00 0.00 2828 1368 0.13 init
07:37:06 AM - 1 0.00 0.00 2828 1368 0.13 |__init
07:37:06 AM TGID TID minflt/s majflt/s VSZ RSS %MEM Command
07:37:08 AM 1 - 0.00 0.00 2828 1368 0.13 init
07:37:08 AM - 1 0.00 0.00 2828 1368 0.13 |__init
07:37:08 AM TGID TID minflt/s majflt/s VSZ RSS %MEM Command
07:37:10 AM 1 - 0.00 0.00 2828 1368 0.13 init
07:37:10 AM - 1 0.00 0.00 2828 1368 0.13 |__init
Average: TGID TID minflt/s majflt/s VSZ RSS %MEM Command
Average: 1 - 0.00 0.00 2828 1368 0.13 init
Average: - 1 0.00 0.00 2828 1368 0.13 |__init
TGID: 線程組ID。
TID: 線程ID。 線程
以上監控不一樣資源的選項能夠同時存在,這樣就將在一次輸出中輸出多種資源的使用狀況,如:pidstat -p 1 -dr。
7. 報告磁盤空間使用情況(df):
該命令最爲經常使用的選項就是-h,該選項將智能的輸出數據單位,以便使輸出的結果更具可讀性。
/> df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 5.8G 3.3G 2.2G 61% /
tmpfs 504M 260K 504M 1% /dev/shm
8. 評估磁盤的使用情況(du):blog
選項 | 說明 |
-a | 包括了全部的文件,而不僅是目錄。 |
-b | 以字節爲計算單位。 |
-k | 以千字節(KB)爲計算單位。 |
-m | 以兆字節(MB)爲計算單位。 |
-h | 是輸出的信息更易於閱讀。 |
-s | 只顯示工做目錄所佔總空間。 |
--exclude=PATTERN | 排除掉符合樣式的文件,Pattern就是普通的Shell樣式,?表示任何一個字符,*表示任意多個字符。 |
--max-depth=N | 從當前目錄算起,目錄深度大於N的子目錄將不被計算,該選項不能和s選項同時存在。 |
#僅顯示子一級目錄的信息。
/> du --max-depth=1 -h
246M ./stephen
246M .
/> du -sh ./* #獲取當前目錄下全部子目錄所佔用的磁盤空間大小。
352K ./MemcachedTest
132K ./Test
33M ./thirdparty
#在當前目錄下,排除目錄名模式爲Te*的子目錄(./Test),輸出其餘子目錄佔用的磁盤空間大小。
/> du --exclude=Te* -sh ./*
352K ./MemcachedTest
33M ./thirdparty隊列