系統監控工具

系統監控工具

top、free、vmstat、iostat、pmap、glances、dstat、iotop、lsofcss

1 命令top

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

  • 格式:
    top [選項]
  • 選項:
    -p:指定進程
    -b:所有顯示全部進程
    -H : 線程模式,示例:top -H -p 5155
    -n#:刷新多少次後退出
    -d#:指定刷新時間間隔,默認爲3秒
  • 執行界面
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
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
  • 首部信息顯示隱藏開關web

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

    1. p:以佔據的cpu百分比%cpu
    2. M:佔據內存百分比,%MEM
    3. T:累計佔據CPU時長,TIME+
  • 管理指令:編程

    1. q:退出命令
    2. S:修改刷新時間間隔
    3. k:終止指定進程
    4. 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

內存空間使用狀態bash

  • 格式:free[OPTION]服務器

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

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

         
         
         
         
         
    • 1
    • 2
    • 3
    • 4
    • 5
    [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. -/+ buffers/cach
      (-buffers/cache) used內存數: used – buffers – cached
      (+buffers/cache) free內存數 :free + buffers + cached
    3. 虛擬內存信息

2.2 vmstat命令

虛擬內存信息

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

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

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

  • 執行結果說明

         
         
         
         
         
    • 1
    • 2
    • 3
    • 4
    • 5
    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. procs:
      r:可運行(正運行或等待運行)進程的個數,和核心數有關
      b:處於不可中斷睡眠態的進程個數(被阻塞的隊列的長度)
    2. memory:
      swpd:交換內存的使用總量
      free: 空閒物理內存總量
      buffer:用於buffer的內存總量
      cache:用於cache的內存容量
    3. swap
      si:從磁盤交換進內存的數據速率(kb/s)
      so:從內存交換至磁盤的數據速率(kb/s)
    4. io:
      bi:從塊設備讀入數據到系統的速率(kb/s)
      bo:保存數據至塊設備的速率
    5. system:
      in:interrupts終端速率,包括時鐘
      cs:context switch 進程切換速率
    6. 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次

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

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

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

示例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
  1. 架構CPU信息
  2. CPU信息
  3. 塊設備信息
    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
  1. RSS:真正佔用空間
  2. 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命令,跨網絡訪問

    1. 服務器模式( S ):
      1. 格式
        glances -s -B IPADDR
      2. 選項:
        -s :表示以服務器端
        -B:開啓某一個監聽地址,不加是全部網卡都參與
        IPADDR:指明監聽的本機那個地址
    2. 客戶端模式( C ):
      1. 格式
        glances -c IPADDR
      2. 選項
        -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

  •  
     
     
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    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

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

    5. 命令iotop

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

     
     
     
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    [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. Read和Write速率總計
      2. 實際的Read和Write速率
      3. 參數以下
        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 不反向解析網絡名字
  • 示例

    1. 查看由登陸用戶啓動而非系統啓動的進程
     
     
     
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    [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. 指定進程號,能夠查看該進程打開的文件
     
     
     
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    [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. 經過參數-i查看網絡鏈接的狀況,包括鏈接的ip、端口等以及一些服務的鏈接狀況,例如:sshd等,也能夠經過制定ip查看該ip的網絡鏈接狀況
      lsof -i -n
      lsof -i@127.0.0.1

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

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

    • 恢復刪除文件,此方法只適用於正在使用的文件
     
     
     
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    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
      $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. COMMAND:進程的名稱
      2. PID:進程標識符
      3. USER:進程全部者
      4. FD:文件描述符,應用程序經過文件描述符識別該文件。如cwd、txt等
      5. TYPE:文件類型,如DIR、REG等
      6. DEVICE:指定磁盤的名稱
      7. SIZE:文件的大小
      8. NODE:索引節點(文件在磁盤上的標識)
      9. NAME:打開文件的確切名稱

    7 命令kill、pkill

    7.1 kill命令

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

    • 格式
      kill [選項] [參數]

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

    • 信號

      1. 介紹
        向進程發送控制信號,以實現對進程管理,每一個信號對應一個數字,信號名稱以SIG開頭,不區分大小寫
      2. 查看
        顯示當前系統可用信號:kill -l, trap -l
        經常使用信號:man 7 signal
      3. 指定信號的方法
        (1)信號的數字標識:一、二、9
        (2)信號完整名稱:SIGHUP
        (3)信號的簡寫名稱:HUP
      4. 經常使用信號
    編號 名稱 做用
    1 SIGHUP 無須關閉進程而讓其重讀配置文件
    2 SIGINT 終止正在運行的進程;至關於Ctrl+c\
    3 SIGQUIT 至關於ctrl+\
    9 SIGKILL 強制殺死正在運行的進程
    15 SIGTERM 終止正在運行的進程
    18 SIGCONT 繼續運行
    19 SIGSTOP 後臺休眠
    • 示例
      1. 終止程序nano
         
         
         
         
         
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      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. 強制終止httpd服務
         
         
         
         
         
      • 1
      • 2
      • 3
      • 4
      [root@hai7 ~]$echo $$ <==查看當前bash進程 2189 [root@hai7 ~]$kill 2189 <==嘗試終止進程,沒有終止 [root@hai7 ~]$kill -9 2189 <==使用9信號,強制終止
      1. 終止所有同名進程
         
         
         
         
         
      • 1
      • 2
      • 3
      [root@hai7 ~]$pidof httpd <==httpd有不少進程,也能夠直接終止父進程 9919 9918 9917 9916 9915 9914 9913 9912 9909 [root@hai7 ~]$killall -15 httpd <==這裏主要爲說明killall用法

    7.2 命令pkill

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

    • 格式
      pkill [options] pattern
    • 選項
    選項 含義
    -signal 發送信號給匹配到的進程
    -u uid effective user,生效者
    -U uid real user ,真正發起運行命令者
    -t terminal 與指定終端相關的進程
    -l 顯示進程名(pgrep可用)
    -a 顯示完整格式的進程名(pgrep可用)
    -P pid 顯示指定進程的子進程
    1. 示例
      1. 刪除全部以http開頭的進程
        pkill -9 "^http"
      2. 刪除終端1的進程
         
         
         
         
         
      • 1
      • 2
      [root@hai7 ~]$pkill -t pts/1 <==結束部分運行進程 [root@hai7 ~]$pkill -t pts/1 -9 <==連同終端一塊兒關閉
    </div>
    					<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7f770a53f2.css" rel="stylesheet">
                </div>
    相關文章
    相關標籤/搜索