linux学习-系统监控工具

系统监控工具

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条件     列出符合条件的进程(4、6、协议、:端口、@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)信号的数字标识:1、2、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
版权声明:本文为博主原创文章,转载请附上博文链接!

posted @ 2019-07-29 20:19  seasonzone  阅读(289)  评论(0编辑  收藏  举报