zoukankan      html  css  js  c++  java
  • 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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    【SpringBoot】04.SpringBoot整合Filter的两种方式
    【SpringBoot】03.SpringBoot整合Servlet的两种方式
    【SpringBoot】02.编写HelloWorld
    【SpringBoot】01.创建Springboot项目及启动器
    Nginx——安装Nginx(二)
    Nginx——Nginx概述(一)
    与、或、异或的运算
    设计模式——单例模式
    MYSQL在当前日期的基础上加上N(年月日分秒)
    阿里云简单的HTTPS配置
  • 原文地址:https://www.cnblogs.com/seasonzone/p/11266248.html
Copyright © 2011-2022 走看看