vmstat:虚拟内存统计
vmstat 是解决内存相关性能问题时最有用的工具之一。
vmstat 命令是 procps-ng 软件包的一部分,其中包括其他有用的性能分析命令,例如 free 和 top。
vmstat 命令,如果没有给定参数,将打印自启动以来各种系统统计数据的平均值。
vmstat 命令接受两个参数。
第一个是延迟,第二个是计数。
延迟是输出之间以秒为单位的值。
计数是要报告的统计信息的迭代次数。
如果没有给出计数,vmstat 将不断报告统计信息。
默认情况下,内存统计信息以 KiB 为单位报告。
-S 选项允许将其更改为分别使用 -S k 、 -S m 和 -S M 以 KB、MB 或者 MiB 报告。
vmstat 输出的第一行自启动以来始终是平均值,因此在收集指标时,请删除第一行并使用后续行。
输出的前两行是标题信息,第三行是正常运行时间平均值。
以下示例显示了从输出的第四行开始的 vmstat 输出:
# vmstat 10 | tail -n +4 1 0 0 479748 1044 570784 0 0 0 5 90 132 0 0 100 0 0 0 0 0 475952 1044 570912 0 0 0 0 81 130 0 0 100 0 0 0 0 0 479456 1044 570856 0 0 0 52 87 137 0 0 100 0 0 ...
vmstat 列概述
iostat 和 mpstat 示例
- 显示 /dev/sda 的扩展输出。
# iostat -x sda Linux 5.4.10-x86_64-linode132 (mylabserver.com) 02/09/2021 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 8.12 0.08 2.85 0.09 0.24 88.63 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 1.76 7.13 3.55 4.17 122.57 93.88 56.07 0.00 0.83 0.71 0.93 0.88 0.68
- 显示 CPU0 的 CPU 统计信息:
# LANG=C mpstat -P 0 Linux 5.4.10-x86_64-linode132 (mywebserver.com) 02/09/21 _x86_64_ (1 CPU) 06:32:13 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 06:32:13 0 8.12 0.08 2.37 0.09 0.22 0.25 0.24 0.00 0.00 88.63
sar 例子
- 为 sar 创建一个系统范围的别名,强制 sar 使用 24 小时制报告。
将其输入到当前 shell 中。
# echo "alias sar='LANG=c sar'" >> /etc/bashrc # source /etc/bashrc
- 保留 60 天的存档而不是 28 天。
更改 /etc/sysconfig/sysstat 中的 HISTORY 变量。
# vim /etc/sysconfig/sysstat HISTORY=60
- 报告 I/O 和传输速率统计信息:
# sar -b Linux 5.4.10-x86_64-linode132 (mylabserver.com) 02/09/2021 _x86_64_ (1 CPU) 12:00:02 AM tps rtps wtps bread/s bwrtn/s 12:10:01 AM 38.16 31.03 7.14 1655.33 390.20 12:20:01 AM 12.11 5.81 6.30 280.99 239.08 12:30:01 AM 8.40 2.34 6.06 105.99 229.95 12:40:01 AM 7.38 1.62 5.76 23.48 211.41 12:50:01 AM 8.69 2.64 6.04 125.33 230.58 01:00:01 AM 8.09 2.26 5.83 77.72 227.70 01:10:02 AM 12.25 6.10 6.15 215.14 235.73 ... Average: 12.81 6.41 6.40 343.31 255.49
- 报告CPU0的利用率:
# sar -P 0 Linux 5.4.10-x86_64-linode132 (web.onitroad.com) 02/09/2021 _x86_64_ (1 CPU) 12:00:02 AM CPU %user %nice %system %iowait %steal %idle 12:10:01 AM 0 11.69 0.00 2.96 0.28 0.06 85.01 12:20:01 AM 0 9.87 0.00 2.53 0.12 0.04 87.44 12:30:01 AM 0 9.96 0.00 2.48 0.09 0.04 87.43 12:40:01 AM 0 9.59 0.00 2.43 0.06 0.04 87.88 12:50:01 AM 0 9.80 0.00 2.46 0.09 0.05 87.59 ... Average: 0 10.00 0.02 2.60 0.14 0.15 87.08
- 从当前日志文件报告网络设备统计信息。
# sar -n DEV Linux 5.4.10-x86_64-linode132 (mylabserver.com) 02/09/2021 _x86_64_ (1 CPU) 12:00:02 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 12:10:01 AM dummy0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 12:10:01 AM tunl0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 12:10:01 AM ip_vti0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 12:10:01 AM ip6gre0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 12:10:01 AM teql0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 12:10:01 AM sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 ... Average: dummy0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: tunl0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: ip_vti0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: ip6gre0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: teql0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 ...
- 配置另外的 cron 作业以收集除磁盘数据之外的电源使用数据。
在 /etc/sysconfig/sysstat 文件中修改以下内容:
SADC_OPTIONS="-S POWER"
在这篇文章中,将讨论大多数 Linux 系统默认包含的一些基本分析工具。
本文中介绍的工具 vmstat、sar、iostat 和 mpstat 相对简单,但提供的基本数据在分析系统性能时非常有用。
对于大多数示例,我们将使用 CentOS 8 机器。
sar:系统活动报告器
sar 命令是一个多用途的分析工具,它是 sysstat 包的一部分。
它以两种模式工作。
它可以每 10 分钟读取一次 cron 作业收集的数据,也可以用于收集有关系统状态的瞬时数据。
注意:cron 作业安装为 /etc/cron.d/sysstat ,它运行 /usr/lib64/sa/sa1 和 /usr/lib64/sa/sa2 命令,使用 /usr/lib64/sa/sadc 收集数据和萨尔。
此数据存储在 /var/log/sa/sadd 中,其中 dd 是该月的两位数日期。
注意:与 vmstat 命令一样,sar 可以使用 delay 和 count 参数来执行,以报告特定迭代次数的统计信息以及每次迭代之间的指定延迟量。
在开始之前确保已安装 sar。
如果未安装,请使用 yum 安装:
# yum install sysstat
安装后,配置 sar 以 5 分钟间隔收集数据:
# vim /etc/cron.d/sysstat # Run system activity accounting tool every 10 minutes */5 * * * * root /usr/lib64/sa/sa1 1 1
为了在使用 sar 时获得最佳结果,请确保使用 LANG 环境变量设置区域设置,以提供 24 小时时间支持。
例如,如果按第一列(时间列)对 sar 数据进行排序,则 en_US.UTF-8 语言环境会将 01:00:00 PM 置于 02:00:00 AM 之前。
这可能会扭曲数据点并使图表毫无价值。
c 语言环境是满足这种排序要求的语言环境。
在处理 sar 数据时,像这样覆盖语言环境:
# LANG=C sar -q Linux 4.18.0-193.28.1.el8_2.x86_64 (2713138b141c.mylabserver.com) 02/09/21 _x86_64_ (2 CPU) 00:00:01 runq-sz plist-sz ldavg-l ldavg-S 1davg-15 blocked 00:10:01 0 317 0.20 0.17 0.18 0 00:20:01 0 317 0.00 0.07 0.13 0 ... Output Truncated ...
事实上,可以简单地为 sar 创建一个别名。
将以下行添加到 /etc/bashrc 或者 ~/.bashrc :
alias sar='LANG=C sar'
通过使用 -f 选项,sar 可用于读取日志文件之一(或者任何一般的 sar 数据文件)。
# sar -q -f /var/log/sa/sa09 Linux 4.18.0-193.28.1.el8_2.x86_64 (2713138b141c.mylabserver.com) 02/09/2021 _x86_64_ (2 CPU) 00:00:01 runq-sz plist-sz ldavg-l ldavg-S 1davg-15 blocked 00:10:01 0 317 0.20 0.17 0.18 0 00:20:01 0 317 0.00 0.07 0.13 0 ... Output Truncated ...
一些配置可以在 /etc/sysconfig/sysstat 文件中完成。
例如,更改 HISTORY 变量以设置为 sar 保留存档的天数。
iostat 和 mpstat
与 sar 一样,iostat 和 mpstat 也是 sysstat 包的一部分。
iostat 和 mpstat 都支持延迟和计数参数,就像 vmstat 命令一样。
iostat 报告设备的 CPU 和 I/O 统计信息。
分区和网络文件系统 (NFS)。
mpstat 命令报告与 CPU 相关的统计信息。
与 sar 一样,可能需要将 LANG 配置为 24 小时制。
vmstat 示例
- vmstat 命令,如果没有给定参数,将打印出自启动以来各种系统统计数据的平均值:
# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 424444 1044 615940 0 0 89 14 58 78 1 0 98 1 0
- 下面是一个例子,其中 vmstat 将每 10 秒输出一次统计信息,直到被中断:
# vmstat 10 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 426440 1044 615872 0 0 88 14 58 78 1 0 98 1 0 0 0 0 426072 1044 615872 0 0 0 1 92 137 0 0 100 0 0 0 0 0 426072 1044 615872 0 0 0 5 74 116 0 0 100 0 0 ...
- 如果我们希望 vmstat 在打印四个报告后退出,请添加一个计数参数:
# vmstat 10 4 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 425236 1044 616252 0 0 86 13 58 78 1 0 98 1 0 0 0 0 424936 1044 616252 0 0 0 1 85 129 0 0 100 0 0 0 0 0 424876 1044 616252 0 0 0 15 70 111 0 0 100 0 0 0 0 0 423360 1044 616252 0 0 0 1 89 130 0 0 100 0 0