青蛙学Linux—系统负载监控

在对系统进行管理时,我们经常需要了解系统的负载情况,如CPU、内存等硬件的使用率等。这是了解系统运行状态的一种手段,也是进行系统性能分析时必须要收集的数据。使用nagios、zabbix等监控工具进行数据收集;而系统的短期负载状态可以使用如vmstat、top等工具进行收集和分析。

1、综合分析工具

1.1、vmstat

vmstat,Virtual Memory Statistics,虚拟内存统计,很多Linux发行版都默认安装了此工具。利用vmstat可以对操作系统的内存信息、进程状态、CPU活动等进行监视,不足之初是无法对某个进程进行深入分析。命令语法如下:

vmstat [选项] [间隔时间 [次数]]

常用选项及参数解释:

  • -n:在周期性循环输出时,输出的头部信息仅显示一次
  • 间隔时间:间隔多长的时间输出一次信息
  • 次数:信息一共输出多少次

下面我们使用vmstat每个三秒输出一次信息,并持续三次,对输出结果进行分析:

[root@localhost ~]# vmstat 3 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 7465000   2108 344468    0    0     0     0   10    8  0  0 100  0  0
 0  0      0 7464968   2108 344468    0    0     0     0   77   60  0  0 100  0  0
 0  0      0 7464296   2108 344496    0    0     0     0  262  198  0  0 100  0  0

procs列:

  • r列:运行和等待CPU时间片的进程数。这个值如果长期大于CPU核数的2~4倍,则说明CPU不足
  • b列:等待资源的进程数,比如正在等待I/O等

memory列:

  • swpd列:切换到交换分区的内存数量(单位k)。如果该列不为0,或较大,只要swap列的si、so长期为0,一般不会影响系统性能
  • free列:当前空闲的物理内存数量(单位k)
  • buff列:buffers占用的内存数量
  • cache:cached占用的内存数量

swap列:

  • si列:从swap写入内存的数量,由磁盘调入内存
  • so列:写入swap的数量,由内存调入磁盘。
    • 正常情况下这两个值都为0,如果这两个值长期不为0,则表示内存不足

io列:

  • bi列:从块设备读入数据的总量,即读磁盘
  • bo列:写入到块设备的数据总量,即写磁盘。
    • 这两个值如果超过1000,且CPU列的wa值较大,则表示磁盘IO有性能问题

system列:

  • in列:表示在某一时间间隔中观测到的每秒设备中断数
  • cs列:表示每秒产生的上下文切换次数
    • 这两个值越大,则由内核消耗的CPU时间会越多

cpu列:

  • us列:用户进程消耗的CPU时间百分比。该值如果长期大于50%,就需要考虑优化程序或算法了
  • sy列:内核进程消耗的CPU时间百分比。us+sy的值应该保持在80%以下
  • id列:CPU空闲状态的时间百分比
  • wa列:IO等待所占用的CPU时间百分比。wa值越高,说明ID等待越严重。一般来说wa的参考值为20%,如果超过20%,说明IO等待严重,引起IO等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或者磁盘控制器的带宽瓶颈造成的(主要是块操作)
  • st列:虚拟机占用的CPU时间百分比

注意:CPU整体负载不高但是成勋运行缓慢,有可能是由于程序使用单线程的原因,只使用一个CPU导致的。

1.2、iostat

iostat,I/O statistics,输入/输出统计,主要应用在对磁盘I/O的监控上。它的输出主要显示磁盘读写操作的统计信息,同时也会给出CPU的使用情况。iostat也不能对某个进程进行深入分析,仅能对系统的整体情况进行分析。

iostat包含在Sysstat包中,一般不默认安装。Sysstat包包含iostatsarmpstat三个工具。

iostat命令语法如下:

iostat [选项] [间隔时间[次数]]

常用选项:

  • -c:显示CPU的使用情况
  • -d:显示磁盘的使用情况
  • -x:显示指定磁盘的统计信息,参数为磁盘设备名

iostat输出信息详解:

[root@localhost ~]# iostat
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 	2018年11月28日 	_x86_64_	(8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.01    0.00    0.01    0.00    0.00   99.98

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.08         0.53         0.50     368028     346173
dm-0              0.09         0.49         0.49     338746     343995
dm-1              0.00         0.00         0.00       2228          0

avg-cpu:CPU使用信息

  • %user:用户进程消耗的CPU时间百分比
  • %nice:改变优先级进程所消耗的CPU时间百分比
  • %system:系统进程消耗的CPU时间百分比
  • %iowait:IO等待占用的CPU时间百分比
  • %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比
  • %idle:CPU空闲时间百分比

Device:硬盘使用信息

  • tps:每秒对磁盘的I/O请求数量
  • kB_read/s: 每秒读取的数据块
  • kB_wrtn/s: 每秒写入的数据块
  • kB_read: 读取的所有块数
  • kB_wrtn:写入的所有块数

加上-x选项后输出的详细磁盘统计信息:

[root@localhost ~]# iostat -x
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 	2018年12月06日 	_x86_64_	(8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.01    0.00    0.01    0.00    0.00   99.98

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.01    0.01    0.07     0.27     0.46    19.99     0.00    0.39    2.13    0.20   0.18   0.00
dm-0              0.00     0.00    0.01    0.07     0.25     0.46    17.87     0.00    0.41    2.67    0.23   0.16   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00    47.40     0.00    2.28    2.28    0.00   1.90   0.00

详解:

  • rrqm/s:每秒进行的合并读操作数目,即rmerge/s
  • wrqm/s:每秒进行的合并写操作数目,即wmerge/s
  • r/s:每秒完成的读I/O设备次数,即rio/s
  • w/s:每秒完成的写I/O设备次数,即wio/s
  • rsec/s:每秒读扇区数
  • wsec/s:每秒写扇区数
  • rkB/s:每秒读k字节数,为rsec/s的一半,因为每扇区大小为512字节
  • wkB/s:每秒写k字节数
  • avgrq-sz:平均每次设备I/O操作的数据大小(扇区)
  • avgqu-sz:平均I/O队列长度
  • await:平均每次设备I/O操作的等待时间(毫秒)
  • r_await:每个读操作平均所需的时间
  • w_await:每个写操作平均所需的时间
  • svctm:平均每次设备I/O操作的服务时间
  • %util:一秒中有多少的时间用于I/O操作,或者说是一秒中有多少的时间I/O队列是非空的

1.3、sar

sar是分析系统性能的重要工具之一,通过sar可以全面获取系统的CPU、运行队列、磁盘I/O、交换分区、内存、CPU中断、网络等性能的数据。

sar命令语法如下:

sar [选项] [-o 文件名] [间隔时间[次数]]

常用选项:

  • -A:显示系统所有资源设备(CPI、内存、磁盘等)的运行状态
  • -u:显示系统所有CPU在采样时间内的负载状态
  • -P:显示系统中指定CPU的使用情况
  • -d:显示系统所有硬盘设备在采样时间内的使用情况
  • -r:显示系统内存在采样时间内的使用情况
  • -b:显示缓冲区在采样时间内的使用情况
  • -v:显示进程、文件、inode和锁表状态
  • -n:显示网络运行状态。可能的参数有 DEV,显示网络接口信息;EDEV,显示网络错误的统计数据;SOCK,显示套接字信息;FULL,显示所有信息

1.4、top

top工具可以用来详细的分析系统的整体负载,它除了可以查看CPU内存的使用情况,还可以查看出具体进程的资源占用。top工具在青蛙学Linux—进程管理中有详细介绍,传送门https://www.cnblogs.com/yu2006070-01/p/9995978.html

2、CPU分析工具

2.1、uptime

uptime是监控系统性能最常用的一个命令,主要用来统计当前的系统运行状况。命令语法如下:

uptime

以下是该命令的输出内容:

[root@localhost ~]# uptime
 14:36:34 up 17 days, 23:21,  1 user,  load average: 0.00, 0.01, 0.05

其输出的信息依次为:当前时间、系统开机后运行的时长、当前登录的用户数量、系统一分钟/五分钟/十五分钟内的平均负载。

注意:load average所显示的系统负载值一般不能大于系统的CPU核数。如果长期大于CPU核数则说明CPU繁忙,负载很高;偶尔大于CPU核数则一般不会影响系统性能。

2.2、htop

类似于top的一个工具,对于CPU和内存的负载使用图形表示。它支持垂直方向和水平方向的滚动,可以查看系统上运行的所有进程以及这些进程的完整命令,还可以杀死指定的进程。

htop包含在第三方源epel中,所以通过YUM安装时请确保已经配置了epel源。

htop命令语法如下:

htop

htop运行界面,其显示的项目与top类似:

2

3、内存分析工具

3.1、free

free是Linux下查看内存使用的常用命令,在青蛙学Linux—内存管理中有详细介绍,传送门https://www.cnblogs.com/yu2006070-01/p/10001951.html

3.2、smem

smem能够为用户提供内存使用的多种报告,和其他的内存工具不同,smem可以报告PSS。

在Linux系统中使用了虚拟内存virtual memory,因此要准确计算一个进程实际使用的物理内存就不容易。而只知道进程使用的虚拟内存大小也没有太大的用处,因为无法获知进程实际分配的物理内存大小。

这种情况下的三个概念:

  • RSS(Resident set size),常用的内存指标,使用top命令可查询。表示进程占用的物理内存大小,但该指标也包好了进程间共享的内存
  • PSS(Proportional set size),所有使用某共享库的进程均分该共享库占用的内存。显然所有进程的PSS之和就是系统的内存使用量。它更加准确一些,因为它将共享内存的大小进行平均后在分摊到各进程上去
  • USS(Unique set size),进程独自占用的内存,不包含任何共享的内存

smem同样包含在epel源中,使用YUM之前请确保已经正确配置epel源。

smem命令语法如下:

smem [选项]

常用选项:

  • -p:以百分比的形式报告内存使用情况
  • -u:报告每一个用户的内存使用情况
  • -P:报告指定进程的内存使用情况

一个例子:查看sshd的内存使用情况

[root@localhost ~]# smem -P sshd
  PID User     Command                         Swap      USS      PSS      RSS 
 1290 root     /usr/sbin/sshd -D                  0     1028     1535     4328 
20545 root     sshd: root@pts/0                   0     2048     2618     5604 
23734 root     python /usr/bin/smem -P ssh        0     5496     5965     7692

4、磁盘分析工具

4.1、iotop

iotop是一个用来监视磁盘I/O使用状况的top类工具,可以监测程序使用磁盘I/O的实时信息。可使用YUM进行安装。

iotop命令语法如下:

iotop [选项]

常用选项:

  • -p:显示指定进程的I/O情况,参数为PID
  • -u:显示指定用户的I/O情况,参数为用户名
  • -P:只显示进程,默认为显示所有线程
  • -k:以千字节显示
  • -t:在每一行前添加当前时间

交互模式下的按键功能:

  • o键:只显示有I/O输出的进程
  • 左右键:改变排序方式,默认按I/O排序
  • p键:线程、进程的切换

iotop界面:

1

5、网络性能分析工具

5.1、ping

ping为常用的网络连通性测试工具,命令格式如下:

ping IP|域名

5.2、netstat -i

通过该命令组合来显示网络接口的详细信息。命令输出如下:

[root@localhost ~]# netstat -i
Kernel Interface table
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
ens160    1500  9299498      3      3 0         52908      0      0      0 BMRU
lo       65536       70      0      0 0            70      0      0      0 LRU

详解:

  • Iface:网络接口
  • MTU:最大传输单元
  • RX-OK:准确无误接受的数据包数量
  • RX-ERR:接受数据包时产生的错误数量
  • RX-DRP:接受数据包时丢弃的数量
  • RX-OVR:接受数据包时由于误差而遗失的数量
  • TX-OK:准确无误发送的数据包数量
  • TX-ERR:发送数据包时产生的错误数量
  • TX-DRP:发送数据包时丢弃的数量
  • TX-OVR:发送数据包时由于误差而遗失的数量
  • Flg:接口标记。可能的值有 L,回环设备;B,设置了广播地址;M,接受所有数据包;R,接口正在运行;U,接口处于活动状态;O,接口上禁用ARP;P,一个点到点的连接

注意:正常情况下RX-ERR/TX-ERR、RX-DRP/TX-DRP和RX-OVR/TX-OVR的值应该都为0,如果这几项不为0且值很大,说明网络状况不佳。

5.3、tcpdump

tcpdump可以将网络中传送的数据包的包头完整的抓取下来进行分析,它支持对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来去掉无用的信息。

tcpdump命令语法如下:

tcpdump [选项]

常用选项:

  • -i:指定网卡
  • -n:指定IP
  • -c:指定抓了多少个包后退出
  • -A:以ASCII方式显示包的内容,这对于文本格式的协议包很有用
  • -x:以十六进制显示包的内容
  • -vvv:显示详细信息
  • -s:按指定的长度截取数据。默认60字节,如果包长大于60字节,会出现数据丢失的现象,所以一般设置为0,这样会按照包的长度抓取数据
  • -r:从文件中读取
  • -w:将抓包结果保存到指定文件
  • tcp|udp:抓取指定协议的数据包
  • src:抓取指定源地址的数据包
  • dst:抓取指定目的地址的数据包
  • port:抓取指定端口的数据包

一些例子:

# 抓取经过eth0的数据包
[root@localhost ~]# tcpdump -i eth0

# 抓取经过eth0,基于TCP协议的数据包
[root@localhost ~]# tcpdump -i eth0 tcp

# 抓取经过eth0,目的或源端口是22的数据包
[root@localhost ~]# tcpdump -i eth0 port 22

# 抓取经过eth0,源地址是192.168.0.22的数据包
[root@localhost ~]# tcpdump -i eth0 src 192.168.0.22

tcpdump抓取数据包的常见包标志:

  • S:SYC,发起连接标志
  • P:PUSH,传送数据标志
  • F:FIN,关闭连接标志
  • ACK:确认包
  • RST:RESET,异常关闭连接
  • .:没有任何标志
原文地址:https://www.cnblogs.com/yu2006070-01/p/10008131.html