linux学习-系统监控工具

系统监控工具

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. 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. -/+ 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. 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. 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

示例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. 架构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. 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

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. 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. 指定进程号,可以查看该进程打开的文件
[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 [email protected]

  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       <==已恢复
  • 执行结果说明
    $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)信号的数字标识: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. 强制终止httpd服务
    [root@hai7 ~]$echo $$      <==查看当前bash进程
    		2189
    [root@hai7 ~]$kill 2189       <==尝试终止进程,没有终止
    [root@hai7 ~]$kill    -9   2189        <==使用9信号,强制终止
    
    1. 终止全部同名进程
    [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的进程
    [root@hai7 ~]$pkill -t pts/1          <==结束部分运行进程
    [root@hai7 ~]$pkill -t pts/1  -9      <==连同终端一起关闭
    

你可能感兴趣的:(linux学习-系统监控工具)