Linux中常用的监控命令

作者: _AlphaBaby_ | 来源:发表于2019-05-09 21:57 被阅读0次

    Linux中常用的监控命令

    在以前使用windows系统的时候,常常会遇到系统变卡,然后我们就会使用快捷键 ctrl+shift+ESC 来调出windows的任务管理器,我们可以看到当前运行的进程,进程所占的CPU资源,内存资源等,还可以直接强制结束掉进程。

    我们在使用linux的时候也同样会出现这样的问题,如果你遇到了,那么你就要学会这些linux查看系统资源的命令。

    [toc]

    下面我分为这么几个角度分别说下这些命令的使用:

    1. 整机
    2. CPU
    3. 内存
    4. 硬盘
    5. 磁盘
    6. 网络I/O

    整机

    top 命令

    参数说明:

    • d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
    • p:通过指定监控进程ID来仅仅监控某个进程的状态。
    • q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
    • S:指定累计模式。
    • s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
    • i:使top不显示任何闲置或者僵死进程。
    • c:显示整个命令行而不只是显示命令名。

    常用命令说明:

    • Ctrl+L:擦除并且重写屏幕
    • K:终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
    • i:忽略闲置和僵死进程。这是一个开关式命令。
    • q:退出程序
    • r:重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
    • S:切换到累计模式。
    • s:改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
    • f或者F:从当前显示中添加或者删除项目。
    • o或者O:改变显示项目的顺序
    • l:切换显示平均负载和启动时间信息。
    • m:切换显示内存信息。
    • t:切换显示进程和CPU状态信息。
    • c:切换显示命令名称和完整命令行。
    • M:根据驻留内存大小进行排序。
    • P:根据CPU使用百分比大小进行排序。
    • T:根据时间/累计时间进行排序。
    • W:将当前设置写入~/.toprc文件中。

    当我们输入top命令后我们可以看到:

    其中有一行是白色的,白色中显示的是字段名称:
    PID: 进程id号
    PPID:父进程id号
    UID:有效用户id号
    USER:有效用户名
    RUSER: 真实用户名
    TTY:终端设备
    %CPU:计算资源
    %MEN:内存
    %TIME+:CPU时间

    VIRT:virtual memory usage 虚拟内存

    1. 进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
    2. 假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量

    RES:resident memory usage 常驻内存

    1. 进程当前使用的内存大小,但不包括swap out
    2. 包含其他进程的共享
    3. 如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
    4. 关于库占用内存的情况,它只统计加载的库文件所占内存大小

    SHR:shared memory 共享内存

    1. 除了自身进程的共享内存,也包括其他进程的共享内存
    2. 虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
    3. 计算某个进程所占的物理内存大小公式:RES – SHR
    4. swap out后,它将会降下来

    uptime 命令

    简化版top命令

    从上面的参数,top命令显示的内容,我们就可以看到很多的参数,也是特别详细的,但是我们可能有时候就只是想了解一些简单的信息,这时候我们就可以使用uptime这个命令了。

    root@VM-0-4-ubuntu:~# uptime
     15:17:22 up 171 days, 16:56,  1 user,  load average: 0.00, 0.02, 0.02
    
    • 系统当前时间 15:17:22
    • 171 days, 16:56 从上次启动开始系统运行的时间
    • 1 user 注意这里实际是连接数量,可以自己测试出来,同一用户多个连接的时候算多个
    • load average: 0.00, 0.02, 0.02 这是重头戏,分别描述了1分钟5分钟15分钟内系统平均负载

    参数

    • -p, --pretty show uptime in pretty format//以比较友好的格式输出
    • -h, --help display this help text//显示帮助选项
    • -s, --since system up since, in yyyy-mm-dd HH:MM:SS format//系统启动时间
    • -V, --version display version information and exit//版本信息

    CPU

    vmstat 命令

    vmstat命令可以查看很多信息,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。但是我们一般使用vmstat命令一般常用来查看cpu的情况。

    参数

    • -a:显示活跃和非活跃内存

    • -f:显示从系统启动至今的fork数量 。

    • -m:显示slabinfo

    • -n:只在开始时显示一次各字段名称。

    • -s:显示内存相关统计信息及多种系统活动数量。

    • delay:刷新时间间隔。如果不指定,只显示一条结果。

    • count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。

    • -d:显示磁盘相关统计信息。

    • -p:显示指定磁盘分区统计信息

    • -S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)

    • -V:显示vmstat版本信息。

    每2秒采集一次每次采集
    • procs(进程)
      • r:当前运行队列中线程的数目,代表线程处于可运行状态,但CPU还未能执行.,这个值可以作为判断CPU是否繁忙的一个指标;当这个值超过了CPU数目,就会出现CPU瓶颈了;这个我们可以结合top命令的负载值同步评估系统性能;
      • b:等待IO的进程数量;如果该值一直都很大,说明IO比较繁忙,处理较慢;
    • memory(内存)
      • swpd:虚拟内存已使用的大小;如果swpd的值不为0,但是si,so的值长期为0,这种情况不会影响系统性能;
      • free:空闲的物理内存的大小;
      • buff:用作缓冲的内存大小;
      • cache:用作缓存的内存大小;如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小;
    • swap(交换空间,单位:KB);内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有时我们看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的;
      • si:每秒从交换区写到内存的大小;
      • so:每秒写入交换区的内存大小;
    • io(单位:块/秒)
      • bi:每秒读取的块数;
      • bo:每秒写入的块数;随机磁盘读写的时候,这2个值越大,能看到CPU在IO等待的值也会越大;
    • system(系统);这2个值越大,会看到由内核消耗的CPU时间会越大;
      • in:每秒中断数,包括时钟中断;
      • cs:每秒上下文切换数;
    • cpu(以百分比表示)
      • us:用户进程执行时间(user time);
      • sy:系统进程执行时间(system time);如果 us+sy大于80%系统负担就比较大了。
      • id:空闲时间(包括IO等待时间);
      • wa:等待IO时间;wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈。

    mpstat 命令

    查看所有cpu核的信息

    常用 mpstat -P ALL 2 每两秒采样一次所有cpu的信息

    参数

    mpstat [-P {|ALL}] [internal [count]]

    • -P {|ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
    • internal 相邻的两次采样的间隔时间、
    • count 采样的次数,count只能和delay一起使用
      当没有参数时,mpstat则显示系统启动以后所有信息的平均值。有interval时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个interval时间段的平均信息。

    字段说明:

    • %usr:表示用户进程所使用CPU的百分比
    • %nice:表示使用nice命令对进程进行降级时CPU的百分比 %sys:表示内核进程使用CPU的百分比
    • %iowait:表示等待进行 I/O 所使用 CPU 的时间百分比
    • %irq:表示用于处理系统中断的 CPU 百分比
    • %soft:表示用于软件中断的 CPU 百分比
    • %steal : 显示虚拟机管理器在服务另一个虚拟处理器时虚拟CPU处在非自愿等待下花费时间的百分比
    • %guest : 显示运行虚拟处理器时CPU花费时间的百分比
    • %idle:显示 CPU 的空闲时间

    pidstat命令

    主要用于监控全部或指定进程占用系统资源的情况。但是我们一般都是用这个命令查看具体的某一个进程的详细情况。

    • -u:默认的参数,显示各个进程的cpu使用统计
    • -r:显示各个进程的内存使用统计
    • -d:显示各个进程的IO使用情况
    • -p:指定进程号
    • -w:显示每个进程的上下文切换情况
    • -t:显示选择任务的线程的统计信息外的额外信息
    • -T { TASK | CHILD | ALL }
      这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
      注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
    • -V:版本号
    • -h:在一行上显示了所有活动,这样其他程序可以容易解析。
    • -I:在SMP环境,表示任务的CPU使用率/内核数量
    • -l:显示命令名和所有参数

    但是我们还是经常这样使用这个命令:

    查看11321这个进程的cpu使用情况

    字段说明

    • PID:进程ID
    • %usr:进程在用户空间占用cpu的百分比
    • %system:进程在内核空间占用cpu的百分比
    • %guest:进程在虚拟机占用cpu的百分比
    • %CPU:进程占用cpu的百分比
    • CPU:处理进程的cpu编号
    • Command:当前进程对应的命令

    更多的使用详情可以查看这篇文章

    内存

    free 命令

    这是我们用来查看系统内存信息最常用的命令。

    参数

    • -b:以Byte为单位显示内存使用情况;
    • -k:以KB为单位显示内存使用情况;
    • -m:以MB为单位显示内存使用情况;
    • -g:以GB为单位显示内存的使用情况;
    • -o:不显示缓冲区调节列;
    • -s<间隔秒数>:持续观察内存使用状况;
    • -t:显示内存总和列;
    • -V:显示版本信息。

    字段说明

    • total 内存总数: 15.7G
    • used 已经使用的内存数: 15.6G
    • free 空闲的内存数: 93M
    • shared 当前已经废弃不用,总是0
    • buffers Buffer 缓存内存数: 298M
    • cached Page 缓存内存数:14G

    pidstat 命令

    前面我们讲解了pidstat命令,但是这里我们也用这个命令来查看内存情况。

    pidstat -p 进程号 -r 采样每隔秒数

    字段说明

    • minflt/s: 每秒次缺页错误次数(minor page faults),次缺页错误次数意即虚拟内存地址映射成物理内存地址产生的page fault次数
    • majflt/s: 每秒主缺页错误次数(major page faults),当虚拟内存地址映射成物理内存地址时,相应的page在swap中,这样的page fault为major page fault,一般在内存使用紧张时产生
    • VSZ: 该进程使用的虚拟内存(以kB为单位)
    • RSS: 该进程使用的物理内存(以kB为单位)
    • %MEM: 该进程使用内存的百分比
    • Command: 拉起进程对应的命令

    硬盘

    df 命令

    参数

    • -a:--all,显示所有的文件系统,包括虚拟文件系统,参考示例2。
    • -B:--block-size,指定单位大小。比如1k,1m等,参考示例3。
    • -h:--human-readable,以人们易读的GB、MB、KB等格式显示,参考示例4。
    • -H:--si,和-h参数一样,但是不是以1024,而是1000,即1k=1000,而不是1k=1024。
    • -i:--inodes,不用硬盘容量,而是以inode的数量来显示,参考示例5。
    • -k:以KB的容量显示各文件系统,相当于--block-size=1k。
    • -m:以KB的容量显示各文件系统,相当于--block-size=1m。
    • -l:--local,只显示本地文件系统。
    • --no-sync:在统计使用信息之前不调用sync命令(默认)。
    • -sync:在统计使用信息之前调用sync命令。
    • -P:--portability,使用POSIX格式显示,参考示例6。
    • -t:--type=TYPE,只显示指定类型的文件系统,参考示例7。
    • -T:--print-type,显示文件系统类型,参考示例8。
    • -x:--exclude-type=TYPE,不显示指定类型的文件系统。
    • --help:显示帮助信息。
    • --version:显示版本信息。

    虽然有这么多的参数,但是我们还是常用 df -h直接查看所有的磁盘信息。

    字段说明

    • Filesystem:代表该文件系统时哪个分区,所以列出的是设备名称。
      1K-blocks:说明下面的数字单位是1KB,可利用-h或-m来改变单位大小,也可以用-B来设置。
    • Used:已经使用的空间大小。
    • Available:剩余的空间大小。
    • Use%:磁盘使用率。如果使用率在90%以上时,就需要注意了,避免磁盘容量不足出现系统问题,尤其是对于文件内容增加较快的情况(如/home、/var/spool/mail等)。
    • Mounted on:磁盘挂载的目录,即该磁盘挂载到了哪个目录下面。

    磁盘I/O

    iostat 命令

    参数

    • -c: 仅显示CPU统计信息.与-d选项互斥.
    • -d: 仅显示磁盘统计信息.与-c选项互斥.
    • -k: 以K为单位显示每秒的磁盘请求数,默认单位块.
    • -p: device | ALL
      与-x选项互斥,用于显示块设备及系统分区的统计信息.也可以在-p后指定一个设备名.
    • -t 在输出数据时,打印搜集数据的时间.
    • -V 打印版本号和帮助信息.
    • -x 输出扩展信息.

    字段说明

    • rrqm/s: 将读入请求合并后,每秒发送到设备的读入请求数.
    • wrqm/s: 将写入请求合并后,每秒发送到设备的写入请求数.
    • r/s: 每秒发送到设备的读入请求数.
    • w/s: 每秒发送到设备的写入请求数.
    • rsec/s: 每秒从设备读入的扇区数.
    • wsec/s: 每秒向设备写入的扇区数.
    • rkB/s: 每秒从设备读入的数据量,单位为K.
    • wkB/s: 每秒向设备写入的数据量,单位为K.
    • avgrq-sz: 发送到设备的请求的平均大小,单位是扇区.
    • avgqu-sz: 发送到设备的请求的平均队列长度.
    • await: I/O请求平均执行时间.包括发送请求和执行的时间.单位是毫秒.
    • svctm: 发送到设备的I/O请求的平均执行时间.单位是毫秒.
    • %util: 在I/O请求发送到设备期间,占用CPU时间的百分比.用于显示设备的带宽利用率. 当这个值接近100%时,表示设备带宽已经占满.

    pidstat 命令

    pidstat -d 采样间隔时间 -p 进程id

    字段说明

    • PID:进程id
    • kB_rd/s:每秒从磁盘读取的KB
    • kB_wr/s:每秒写入磁盘KB
    • kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
    • COMMAND:task的命令名

    网络I/O

    ifstat 命令

    参数

    • -l: 监测环路网络接口。缺省情况下ifstat监测活动的所有非环路网络接口
    • -a: 监测能检测到的所有网络接口的状态信息。
    • -z: 隐藏流量是无的接口,如接口启动了但是未使用的。
    • -i: <interface> 指定要监测的接口。
    • -s: 通过SNMP查询一个远程主机。
    • -h: 显示帮助信息
    • -n: 关闭周期性显示头部信息。
    • -t: 在每一行的开头加一个时间戳
    • -T: 报告所有检测接口的全部带宽
    • -w: 指定间隔时间(与官方的文档说明并不同,不知道是不是写文档的人写错,反正我测试后是间隔时间)
    • -W: 如果显示内容超出终端窗口的宽度,就换行
    • -S: 在同一行更新显示内容
    • -b: 用kbits/s显示带宽
    • -q: 按键模式
    • -v: 显示版本信息
    • -d: 指定一个驱动来收集状态信息

    每秒输出一次网络IO信息

    其中的 eth0 为网卡。

    相关文章

      网友评论

        本文标题:Linux中常用的监控命令

        本文链接:https://www.haomeiwen.com/subject/sgqnoqtx.html