天天看點

[收藏學習]Linux的實時監測指令

十八.  和系統運作狀況相關的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 微網誌:@念槐聚 聯系;

繼續閱讀