linux學習-系統監控工具

系統監控工具ios

come from:https://blog.csdn.net/free050463/article/details/82842273
top、free、vmstat、iostat、pmap、glances、dstat、iotop、lsof
1 命令top

動態監控系統狀態 ,在命令行輸入top,界面以下

    格式:
    top [選項]
    選項:
    -p:指定進程
    -b:所有顯示全部進程
    -H : 線程模式,示例:top -H -p 5155
    -n#:刷新多少次後退出
    -d#:指定刷新時間間隔,默認爲3秒
    執行界面

1. |top - 21:01:47 up 10:45,  4 users,  load average: 0.04, 0.03, 0.05|
   |命令uptime信息|
2. |Tasks: 259 total, |  1 running, |258 sleeping, |  0 stopped, |  0 zombie
   |  總進程數         |   活動進程   |   睡眠進程    |   中止進程  |  殭屍進程|
3. |%Cpu(s): | 0.1 us, | 0.2 sy, |       0.0 ni,        | 99.8 id,| 0.0 wa, | 0.0 hi, | 0.0 si, | 0.0 st|
   | cpu狀態 |用戶佔用比例|內核佔用|改變過ni優先級的進程佔用| 空閒佔比 |等待IO時間|  硬中斷  |軟終端|丟失的時間片|
4. |KiB Mem :  1514076 total, |   76768 free, |  791284 used, |  646024 buff/cache|
    |            總內存        |     剩餘量    |     使用量     |用於緩存的量|
5. |KiB Swap:  3145724 total, | 3145724 free, |       0 used. |  503752 avail Mem |
   |        虛擬內存總量       |      空閒量    |     使用量    |緩衝的交換區總量|
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                          
   742 root      20   0  320060   6536   5072 S   0.3  0.4   0:49.45 vmtoolsd  

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    首部信息顯示隱藏開關
        uptime信息:開關 l
        tasks信息與cpu: 開關 t
        memory信息:開關 m
        cpu分別顯示:(數字)1,顯示全部核心信息
        st:丟失的時間片,系統識別虛擬機,但不會識別虛擬機中運行的,cpu會分配給虛擬機中一些進程用,就會產生未知時間片

    排序:
        p:以佔據的cpu百分比%cpu
        M:佔據內存百分比,%MEM
        T:累計佔據CPU時長,TIME+

    管理指令:
        q:退出命令
        S:修改刷新時間間隔
        k:終止指定進程
        W: 保存至root/.toprc

####7.5.1 htop命令:EPEL源
與top命令類似,UI設計前衛一些

    格式
    htop [選項]
    選項:
    -d#:指定延遲時間
    -u UserName:僅顯示指定用戶的進程
    -s COLUME:以指定字段進行排序
    子命令
    s:跟蹤選定進程系統調用
    l:顯示選定進程打開的文件列表
    a:將選定的進程綁定至某指定CPU核心
    t:顯示進程樹

2 內存空間管理
2.1 命令free

內存空間使用狀態

    格式:free[OPTION]

    選項
    -b:以字節爲單位
    -m:以MB爲單位
    -g:以GB爲單位
    -h:易讀模式
    -t:顯示RAM+swap的總和
    -s n:刷新間隔爲n秒
    -c n:刷新n次後即退出

    執行結果
    buffers,解決速度不匹配問題;cache緩存,提升訪問速度的

    [v9@hai7 ~]$free
                  total       used       free      shared     buffers     cached                                                 
    1:Mem:       1003020     887824     115196       4104      89252     428612
    2:-/+ buffers/cache:     369960     633060      
    3:Swap:      2097148       1076    2096072
        1
        2
        3
        4
        5

        內存使用狀況
        -/+ buffers/cach
        (-buffers/cache) used內存數: used – buffers – cached
        (+buffers/cache) free內存數 :free + buffers + cached
        虛擬內存信息

2.2 vmstat命令

虛擬內存信息

    格式
    vmstat [options][delay[count]]

    選項:
    -s:顯示內存的統計數據

    示例:
    vmstat 1 動態觀察,1秒刷新一次
    vmstat 1 10 執行10次退出,1秒執行一次

    執行結果說明

    vmstat -n
    |procs| |-----------memory--------| |-swap-| -|---io---|-|system ||-------cpu-----|
        1                 2                 3          4        5              6
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs  us sy id wa st
     0  0      0 107296  94720 442468    0    0     5     1   17   16  0  0 100  0  0    
        1
        2
        3
        4
        5

        procs:
        r:可運行(正運行或等待運行)進程的個數,和核心數有關
        b:處於不可中斷睡眠態的進程個數(被阻塞的隊列的長度)
        memory:
        swpd:交換內存的使用總量
        free: 空閒物理內存總量
        buffer:用於buffer的內存總量
        cache:用於cache的內存容量
        swap
        si:從磁盤交換進內存的數據速率(kb/s)
        so:從內存交換至磁盤的數據速率(kb/s)
        io:
        bi:從塊設備讀入數據到系統的速率(kb/s)
        bo:保存數據至塊設備的速率
        system:
        in:interrupts終端速率,包括時鐘
        cs:context switch 進程切換速率
        cpu:
        us:運行非內核代碼的時間
        sy:運行內核代碼的時間
        id:空閒時間.Linux2.5.41前,包括IO-wait time
        wa:I/O等待時間. 2.5.41前,包括in idle
        st:丟失時間.

2.3命令iostat

與vmstat使用方法類似,統計CPU和設備IO信息

    格式
    iostat [選項] [-p [device…] [interval [count] ]
    選項
    -c:僅顯示CPU統計信息.與-d選項互斥.
    -d:僅顯示磁盤統計信息.與-c選項互斥.
    -k:以K爲單位顯示每秒的磁盤請求數,默認單位塊.
    -p:device | ALL 與-x選項互斥,用於顯示塊設備及系統分區的統計信息.
    -t:在輸出數據時,打印蒐集數據的時間.
    -V:打印版本號和幫助信息.
    -x :輸出擴展信息.
    示例

示例1. 監控設備adv1的擴展數據,每秒刷新一次,執行10次

[v9@hai7 ~]$iostat -x -d sda1 1 10
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda1              0.00     0.00    0.01    0.00     0.09     0.00     8.42     0.00    0.07    0.07    0.14   0.07   0.00

    1
    2
    3

    rrqm/s:每秒這個設備相關的讀取請求有多少被合併了
    rsec/s:每秒讀取的扇區數
    avgrq-sz:平均請求扇區的大小
    avgqu-sz:是平均請求隊列的長度,越短越好
    await: I/O響應時間,通常低於5ms,await與svctm差值越小,則說明隊列時間越短,反之差值越大,隊列時間越長,說明系統出了問題。
    svctm: 表示平均每次設備I/O操做的服務時間
    %util: 在統計時間內全部處理IO時間,除以總共統計時間。例如,若是統計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閒置,那麼該設備的%util = 0.8/1 = 80%,因此該參數暗示了設備的繁忙程度

示例2. 以k爲單位顯示磁盤使用狀況,每2秒刷新一次

[v9@hai7 ~]$iostat -d -k 2

    1

示例3. 默認執行結果示例

[v9@hai7 ~]$iostat
1:Linux 2.6.32-754.el6.x86_64 (hai6)     09/06/2018     _x86_64_    (4 CPU)

2:avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.02    0.00    0.16    0.00    0.00   99.81

3:Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
   scd0              0.01         0.03         0.00       1540          0
   sda               0.46        19.71         2.57    1047842     136528

    1
    2
    3
    4
    5
    6
    7
    8
    9

    架構CPU信息
    CPU信息
    塊設備信息
    1. tps: 每秒鐘發送到的I/O請求數.
    2. Blk_read /s: 每秒讀取的block數.
    3. Blk_wrtn/s: 每秒寫入的block數.
    4. Blk_read: 讀入的block總數.
    5. Blk_wrtn: 寫入的block總數.

2.4 命令pmap

進程對應的內存映射,與文件/proc/PID(進程編號)/maps相似

    格式
    pmap [options] pid […]

    選項
    -x:顯示詳細格式的信息

    執行示例,查看進程7795的內存佔用信息

    [v9@hai7 ~]$pmap -x 7795
    7795:   nano
    Address           Kbytes     RSS   Dirty Mode   Mapping
    0000000000400000     168     112       0 r-x--  nano
    0000000000629000       8       8       4 rw---  nano
    0000000001fd9000     528     468     468 rw---    [ anon ]
    ...               <==省略

    [v9@hai7 ~]$cat  /proc/7795/maps  <==與pmap顯示內容類似
        1
        2
        3
        4
        5
        6
        7
        8
        9

        RSS:真正佔用空間
        Dirty:髒數據,數據沒有最終結束,處於中間狀態

3. 命令glances

EPEL源,能夠跨網絡監控

    格式
    glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [–password] [-t refresh] [-f file][-o output]

    經常使用選項:
    選項     含義
    -b     以Byte爲單位顯示網卡數據速率
    -d     關閉磁盤I/O模塊
    -f /path/to/somefile     設定輸入文件位置
    -o{HTML     CSV}
    -m     輸入格式
    -n     禁用mount模塊
    -t     延遲時間間隔
    -1     每一個CPU的相關數據單獨顯示

    內建命令
    選項     含義
    a     按進程自動排序
    l     顯示或隱藏日誌
    c     按 CPU% 排序
    b     Bytes or bits for network I/O
    m     按 MEM% 排序
    w     刪除警告日誌
    p     按用戶排序
    x     刪除警告和關鍵日誌
    i     按I/O使用情況排序
    1     流顯示每一個CPU內核的使用狀況
    d     顯示隱藏磁盤讀寫情況
    h     幫助信息
    f     顯示系統信息
    t     View network I/O as combination
    n     顯示網絡狀態
    u     View cumulative network I/O
    s     顯示傳感器信息
    q     離開程序
    y     hddtemp統計信息

    C/S模式下運行glances命令,跨網絡訪問
        服務器模式( S ):
            格式
            glances -s -B IPADDR
            選項:
            -s :表示以服務器端
            -B:開啓某一個監聽地址,不加是全部網卡都參與
            IPADDR:指明監聽的本機那個地址
        客戶端模式( C ):
            格式
            glances -c IPADDR
            選項
            -c:以客戶端
            IPADDR:要連入的服務器端地址,服務器指定的地址

4 命令dstat

系統資源統計,代替vmstat,iostat

    格式
    dstat [-afv] [options…] [delay[count]]

    選項
    選項     含義
    -c     顯示cpu相關信息
    -C     此參數可按需分別顯示cpu狀態,例:-C 0,1 是顯示cpu0和cpu1的信息
    -d     顯示disk相關信息
    -D     total,sda,sdb…
    -g     顯示page相關統計數據
    -m     顯示memory相關統計數據
    -n     顯示network相關統計數據
    -p     顯示process相關統計數據
    -r     顯示io請求相關統計數據
    -s     顯示swapped相關統計數據
    -y     系統狀態
    - -socket     用來顯示tcp udp端口狀態
    - -ipc     顯示ipc消息隊列,信號等信息
    - -top-cpu     顯示最佔用CPU的進程
    - -top-io     顯示最佔用io的進程
    - -top-mem     顯示最佔用內存的進程
    - -top-latency     顯示延遲最大的進程
    - -output     將狀態信息以##.csv後綴定向到指定目錄下

    示例
    默認輸入 dstat 等於輸入了dstat -cdngy 1或dstat -a 1

dstat   
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw
  0   0 100   0   0   0|   0     0 | 424B  346B|   0     0 | 121   104
  0   0 100   0   0   0|   0     0 | 240B  346B|   0     0 | 102    92

    1
    2
    3
    4
    5

system:int、csw分別爲系統的中斷次數(interrupt)和上下文切換(context switch)
5. 命令iotop

是一個用來監視磁盤I/O使用情況的top類工具備與top類似的UI,其中包括PID、用戶、I/O、進程等相關信息,可查看每一個進程是如何使用IO

[root@hai7 ~]$iotop
1:Total DISK READ :       0.00 B/s | Total DISK WRITE :       0.00 B/s
2:Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       0.00 B/s
3: PID PRIO<  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND                                                             
  1936 ?dif root        0.00 B/s    0.00 B/s  0.00 %  0.00 % tracker-extract
  1943 ?dif root        0.00 B/s    0.00 B/s  0.00 %  0.00 % tracker-miner-fs
     7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]

    1
    2
    3
    4
    5
    6
    7

    界面如上所示
        Read和Write速率總計
        實際的Read和Write速率
        參數以下
        PID:線程ID
        PRIO:優先級
        USER:用戶
        DISK:磁盤讀速率
        SWAPIN:swap交換百分比
        IO:IO等待所佔的百分比
        COMMAND:線程/進程命令

    iotop經常使用參數
    選項     含義
    -o,–only     只顯示正在成I/O的進程或線程,除了傳參,能夠在運行過程總按o生效
    -b,–batch     非交互模式,通常用來記錄日誌
    -n NUM,–iter=NUM     設置監測的次數,默認無限。在非交互模式下頗有用
    -d SEC,–delay=SEC     設置每次檢測的間隔,默認1秒,接受非整型數據例如1.1
    -p PID,–pid=PID     指定檢測的進程/線程
    -u USER,–user=USER     指定監測某個用戶產生的I/O
    -P --processes     僅顯示進程,默認iotop顯示全部線程
    -a,–accumulated     顯示累計的I/O,而不是帶寬
    -k,–kilobytes     使用KB單位,而不是對人友好的單位,在非交互模式下,腳本編程有用
    -t,–time     加上時間戳,非交互非模式
    -q,–quiet     禁止頭幾行,非交互模式,有三種指定方式
    -q     只在第一次監測時顯示列名
    -qq     永遠不顯示列名
    -qqq     永遠不顯示I/O彙總

    交互按鍵
    按鍵     用途
    left和right方向鍵     改變排序
    r     反向排序
    o     切換至選項–only
    p     切換至–processes選項
    a     切換至–accumulatd選項
    q     退出
    i     改變線程的優先級

6. 命令lsof

list open files查看當前系統文件的工具,在Linux環境下,一切皆文件,用戶經過文件不只能夠訪問常規數據,還能夠訪問網絡鏈接和硬件如傳輸控制協議(TCP)和用戶數據協議(UDP)套接字等,系統在後臺都爲該應用程序分配了一個文件描述符

    格式
    lsof [選項]

    選項
    選項     含義
    -a     列出打開文件存在的進程
    -c     顯示command列中包含指定字符的進程所打開的文件
    -g     列出GID號進程詳情
    -d FD     列出佔用該文件號的進程
    +d /DIR/     列出目錄下被打開的文件
    +D /DIR/     遞歸列出目錄下被打開的文件
    -n目錄     列出使用NFS的文件
    -i條件     列出符合條件的進程(四、六、協議、:端口、@ip)
    -p進程號     列出指定進程號所打開的文件
    -u     列出UID號進程詳情
    -h     列出UID號進程詳情
    -v     顯示版本信息
    -n     不反向解析網絡名字

    示例

    查看由登陸用戶啓動而非系統啓動的進程

[root@hai7 ~]$tty
/dev/pts/0
[root@hai7 ~]$lsof /dev/pts/0
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    2189 root    0u   CHR  136,0      0t0    3 /dev/pts/0
bash    2189 root    1u   CHR  136,0      0t0    3 /dev/pts/0
bash    2189 root    2u   CHR  136,0      0t0    3 /dev/pts/0

    1
    2
    3
    4
    5
    6
    7

    指定進程號,能夠查看該進程打開的文件

[root@hai7 ~]$lsof -p 2189
COMMAND  PID USER   FD   TYPE DEVICE  SIZE/OFF      NODE NAME
bash    2189 root  cwd    DIR    8,3      4096        64 /data
bash    2189 root  mem    REG    8,2 106070960 101092451 /usr/lib/locale/locale-archive
...                              <==省略部份內容
bash    2189 root   0u    CHR  136,0       0t0         3 /dev/pts/0   

    1
    2
    3
    4
    5
    6

    經過參數-i查看網絡鏈接的狀況,包括鏈接的ip、端口等以及一些服務的鏈接狀況,例如:sshd等,也能夠經過制定ip查看該ip的網絡鏈接狀況
    lsof -i -n
    lsof -i@127.0.0.1

    經過參數-i:端口,能夠查看端口的佔用狀況,-i參數還有查看協議,ip的鏈接狀況等
    lsof -i:80 -n

    查看指定狀態的網絡鏈接
    lsof -n -P -i TCP -s TCP:ESTABLISHED
    -n:no host names, -p:no port names
    -i:TCP指定協議
    -s:指定協議狀態經過多個參數能夠清晰的查看網絡鏈接狀況、協議鏈接狀況等

    恢復刪除文件,此方法只適用於正在使用的文件

1. 肯定文件是在使用中
[root@hai7 ~]$lsof  /var/log/messages
2. 刪除文件
[root@hai7 ~]$rm  -f  /var/log/messages
3. 查看文件進程,拿到進程編號
[root@hai7 ~]$lsof |grep  /var/log/messages
4. 進入對應進程下的fd文件
[root@hai7 ~]$cd  /proc/1027/fd/
5. 查看文件列表,能夠看到帶有(deleted)的文件
[root@hai7 ~]$ll
lrwx------ 1 root root 64 Sep  6 14:15 3 -> socket:[28141]
l-wx------ 1 root root 64 Sep  6 14:15 4 -> /var/log/messages (deleted)   <==丟失的文件
6. 恢復文件,查看丟失的文件,這裏會顯示內容,重定向到刪除目錄
[root@hai7 ~]$cat /proc/1027/fd/4>/var/log/messages
[root@hai7 ~]$ls /var/log/messages
/var/log/messages       <==已恢復

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    執行結果說明

    $lsof -i tcp
    COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    rpcbind    744     rpc    8u  IPv4  15285      0t0  TCP *:sunrpc (LISTEN)
    rpcbind    744     rpc   11u  IPv6  15288      0t0  TCP *:sunrpc (LISTEN
        1
        2
        3
        4

        COMMAND:進程的名稱
        PID:進程標識符
        USER:進程全部者
        FD:文件描述符,應用程序經過文件描述符識別該文件。如cwd、txt等
        TYPE:文件類型,如DIR、REG等
        DEVICE:指定磁盤的名稱
        SIZE:文件的大小
        NODE:索引節點(文件在磁盤上的標識)
        NAME:打開文件的確切名稱

7 命令kill、pkill
7.1 kill命令

用來刪除執行中的程序或工做,kill可將指定的信息送至程序。預設的信息爲SIGTERM(15),可將指定程序終止。若仍沒法終止該程序,可以使用SIGKILL(9)信息嘗試強制刪除程序。程序或工做的編號可利用ps指令或job指令查看

    格式
    kill [選項] [參數]

    選項
    -l :列出指定編號的信息,不指定則列出所有的信息名稱
    -n:指定信號,編號或名稱均可以
    -u:指定用戶

    信號
        介紹
        向進程發送控制信號,以實現對進程管理,每一個信號對應一個數字,信號名稱以SIG開頭,不區分大小寫
        查看
        顯示當前系統可用信號:kill -l, trap -l
        經常使用信號:man 7 signal
        指定信號的方法
        (1)信號的數字標識:一、二、9
        (2)信號完整名稱:SIGHUP
        (3)信號的簡寫名稱:HUP
        經常使用信號

編號     名稱     做用
1     SIGHUP     無須關閉進程而讓其重讀配置文件
2     SIGINT     終止正在運行的進程;至關於Ctrl+c\
3     SIGQUIT     至關於ctrl+\
9     SIGKILL     強制殺死正在運行的進程
15     SIGTERM     終止正在運行的進程
18     SIGCONT     繼續運行
19     SIGSTOP     後臺休眠

    示例
        終止程序nano

    1: 找到對應PID
    [root@hai7 ~]$ps -C nano           
     PID TTY          TIME CMD
    4763 pts/0    00:00:00 nano
    2:終止進程,指定信號15
    [root@hai7 ~]$kill -n 15 4812     
        1
        2
        3
        4
        5
        6

        強制終止httpd服務

    [root@hai7 ~]$echo $$      <==查看當前bash進程
            2189
    [root@hai7 ~]$kill 2189       <==嘗試終止進程,沒有終止
    [root@hai7 ~]$kill    -9   2189        <==使用9信號,強制終止
        1
        2
        3
        4

        終止所有同名進程

    [root@hai7 ~]$pidof httpd              <==httpd有不少進程,也能夠直接終止父進程
            9919 9918 9917 9916 9915 9914 9913 9912 9909
    [root@hai7 ~]$killall -15 httpd        <==這裏主要爲說明killall用法
        1
        2
        3

7.2 命令pkill

與pgrep用法類似,查找同時能夠終止進程

    格式
    pkill [options] pattern
    選項

選項     含義
-signal     發送信號給匹配到的進程
-u uid     effective user,生效者
-U uid     real user ,真正發起運行命令者
-t terminal     與指定終端相關的進程
-l     顯示進程名(pgrep可用)
-a     顯示完整格式的進程名(pgrep可用)
-P pid     顯示指定進程的子進程

    示例
        刪除全部以http開頭的進程
        pkill -9 "^http"
        刪除終端1的進程

    [root@hai7 ~]$pkill -t pts/1          <==結束部分運行進程
    [root@hai7 ~]$pkill -t pts/1  -9      <==連同終端一塊兒關閉
---------------------
做者:你的微笑像茉莉
來源:CSDN
原文:https://blog.csdn.net/free050463/article/details/82842273
版權聲明:本文爲博主原創文章,轉載請附上博文連接!編程

相關文章
相關標籤/搜索