系统监控工具

时间:2021-08-15 02:09:18

系统监控工具

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
  • 首部信息显示隐藏开关

    1. uptime信息:开关 l
    2. tasks信息与cpu: 开关 t
    3. memory信息:开关 m
    4. cpu分别显示:(数字)1,显示所有核心信息
      st:丢失的时间片,系统识别虚拟机,但不会识别虚拟机中运行的,cpu会分配给虚拟机中一些进程用,就会产生未知时间片
  • 排序:

    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

内存空间使用状态

  • 格式: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
    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秒执行一次

  • 执行结果说明

    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
    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次

[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
  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秒刷新一次

[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
  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

  • 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
    • 界面如上所示

      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条件 列出符合条件的进程(4、6、协议、:端口、@ip)
    -p进程号 列出指定进程号所打开的文件
    -u 列出UID号进程详情
    -h 列出UID号进程详情
    -v 显示版本信息
    -n 不反向解析网络名字
  • 示例

    1. 查看由登录用户启动而非系统启动的进程
    [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
    1. 指定进程号,可以查看该进程打开的文件
    [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
    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. 确定文件是在使用中
    [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
      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)信号的数字标识:1、2、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: 找到对应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
      1. 强制终止httpd服务
      [root@hai7 ~]$echo $$      <==查看当前bash进程
      		2189
      [root@hai7 ~]$kill 2189       <==尝试终止进程,没有终止
      [root@hai7 ~]$kill    -9   2189        <==使用9信号,强制终止
      
         
         
         
         
         
         
      • 1
      • 2
      • 3
      • 4
      1. 终止全部同名进程
      [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 显示指定进程的子进程
    1. 示例
      1. 删除所有以http开头的进程
        pkill -9 "^http"
      2. 删除终端1的进程
      [root@hai7 ~]$pkill -t pts/1          <==结束部分运行进程
      [root@hai7 ~]$pkill -t pts/1  -9      <==连同终端一起关闭
      
         
         
         
         
         
         
      • 1
      • 2
            </div>
    					<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7f770a53f2.css" rel="stylesheet">
                </div>