十八. 和系統運作狀況相關的Shell指令:
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
-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 183 Nov 11 08:02 users
-rw-r--r--. 1 root root 279 Nov 11 08:45 users2
其中黃色高亮的部分,為touch aa指令執行之後watch輸出的高亮變化部分。
2. 檢視目前系統記憶體使用狀況(free):
free指令有以下幾個常用選項:
-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
Mem: 1007 655 351 0 86 344
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
sda 0.00 0.00 0.00 0 0
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
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
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
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):
-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 ./*
33M ./thirdparty
原文參見:http://www.cnblogs.com/stephen-liu74/archive/2011/12/05/2257887.html
轉載請注明出處:http://www.cnblogs.com/haochuang/ 8年IT工作經驗,5年測試技術與管理,2年産品與項目管理,曾參與過雲計算\雲存儲\車聯網産品研發工作; 業餘自媒體人,有技術類垂直微信公衆号;如有招聘或求職方面需求,請Mail to [email protected] ;或通過 QQ:363573922 微網誌:@念槐聚 聯系;