AlphaBaby's Blog.

Linux中常用的监控命令

2019/05/10 Share

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这个命令了。

1
2
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: 指定要监测的接口。
  • -s: 通过SNMP查询一个远程主机。
  • -h: 显示帮助信息
  • -n: 关闭周期性显示头部信息。
  • -t: 在每一行的开头加一个时间戳
  • -T: 报告所有检测接口的全部带宽
  • -w: 指定间隔时间(与官方的文档说明并不同,不知道是不是写文档的人写错,反正我测试后是间隔时间)
  • -W: 如果显示内容超出终端窗口的宽度,就换行
  • -S: 在同一行更新显示内容
  • -b: 用kbits/s显示带宽
  • -q: 按键模式
  • -v: 显示版本信息
  • -d: 指定一个驱动来收集状态信息

每秒输出一次网络IO信息

其中的 eth0 为网卡。

CATALOG
  1. 1. Linux中常用的监控命令
    1. 1.1. 整机
      1. 1.1.1. top 命令
      2. 1.1.2. uptime 命令
    2. 1.2. CPU
      1. 1.2.1. vmstat 命令
      2. 1.2.2. mpstat 命令
      3. 1.2.3. pidstat命令
    3. 1.3. 内存
      1. 1.3.1. free 命令
      2. 1.3.2. pidstat 命令
    4. 1.4. 硬盘
      1. 1.4.1. df 命令
    5. 1.5. 磁盘I/O
      1. 1.5.1. iostat 命令
      2. 1.5.2. pidstat 命令
    6. 1.6. 网络I/O
      1. 1.6.1. ifstat 命令