查看 sysstat 软件包实用程序
在本练习中,您将分析 sysstat 工具命令的输出。
成果
您应能够:
- 解读 vmstat、mpstat、iostat 和 pidstat 命令的输出。
- 使用更新的 cron 作业在
servera
上配置 sar,然后生成报告。
以 student
身份登录 workstation
虚拟机,密码为 student
。
运行 lab perftools-sysstat start命令,以设置引导式练习环境。
[student@workstation ~]$ lab perftools-sysstat start
注意
当指示使用 sudo命令进行特权升级时,如果提示输入密码,请输入 student
。
在
workstation
虚拟机上,并排打开两个终端窗口。在各个终端中,以 student 用户身份使用 ssh命令登录servera
。[student@workstation ~]$ ssh student@servera [student@servera ~]$
在第一个终端,使用 sudo -i命令切换至
root
用户身份。[student@servera ~]$ sudo -i [root@servera ~]#
安装 sysstat 软件包。sysstat 软件包中包含名为 sysstat-collect.timer 和 sysstat-collect.service 的两个 systemd 单元。修改定时器单元配置文件,以便每分钟收集一次系统活动数据。
重要
不要编辑
/usr/lib/systemd
目录下的文件。相反,请将单元文件复制到/etc/systemd/system
目录,然后编辑这个副本。systemd
进程首先会查找和使用/etc/systemd/system
中的配置文件。安装 sysstat 软件包。
[root@servera ~]# yum install sysstat ...output omitted...
将
/usr/lib/systemd/system/sysstat-collect.timer
复制到/etc/systemd/system/sysstat-collect.timer
。[root@servera ~]# cp /usr/lib/systemd/system/sysstat-collect.timer \ /etc/systemd/system/sysstat-collect.timer
编辑
/etc/systemd/system/sysstat-collect.timer
,让定时器单元每分钟运行一次。[root@servera ~]# vim /etc/systemd/system/sysstat-collect.timer ...output omitted... # Activates activity collector once every minute [Unit] Description=Run system activity accounting tool once every minute [Timer] OnCalendar=*:00/01 [Install] WantedBy=sysstat.service
使用 systemctl daemon-reload命令,确保
systemd
知道这些更改。[root@servera ~]# systemctl daemon-reload
使用 systemctl命令,激活
sysstat-collect.timer
定时器单元。[root@servera ~]# systemctl enable --now sysstat-collect.timer
在第一个终端上,退出
root
用户帐户,在servera
上以student
用户身份返回。[root@servera ~]# exit logout [student@servera ~]$
运行 vmstat命令,在更新之间延迟一秒钟。保持运行 10 秒钟左右。查看
id
列,了解 CPU 空闲时间百分比。不同系统和命令运行的输出会有所不同。[student@servera ~]$ vmstat 1 procs ... ------cpu----- r b ... us sy id wa st 1 0 ... 3 0 96 0 0 0 0 ... 0 0 100 0 0 0 0 ... 0 0 100 0 0 ...output omitted...
按 Ctrl+C 组合键退出 vmstat 命令。
执行
/home/student/stress.py
脚本以生成负载,然后使用 vmstat 观察 CPU 的使用情况。如何让系统处于 100% 运行状态,让 CPU 不再空闲?使用 vmstat命令打印报告,间隔为 1 秒钟。
在后台执行
/home/student/stress.py
,并重新运行 vmstat 命令。[student@servera ~]$ ./stress.py & [1] 24074 [student@servera ~]$ vmstat 1 procs ... ------cpu----- r b ... us sy id wa st 4 0 ... 3 0 96 0 0 1 0 ... 50 0 50 0 0 1 0 ... 50 0 50 0 0
请注意,当前 CPU 的空闲 (
id
) 和运行用户空间代码 (us
) 的时间占比约为 50%。在第二个终端中,在后台执行
/home/student/stress.py
脚本。[student@servera ~]$ ./stress.py & [1] 24076
procs ... ------cpu----- r b ... us sy id wa st 2 0 ... 100 0 0 0 0 2 0 ... 100 0 0 0 0 ...output omitted...
从第一个终端中,观察 vmstat命令。空闲 (
id
) 和运行用户空间代码 (us
) 的时间占比约为 100%,该进程对两个 CPU 均有使用。按 Ctrl+C 组合键退出 vmstat 命令。
在这两个终端中,终止
stress.py
进程。[student@servera ~]$ pkill stress.py [1]+ Terminated ./stress.py
执行
/home/student/stress01.py
脚本,然后运行 vmstat 和 mpstat 以检查 CPU 使用情况。在第一个终端中,在后台执行
/home/student/stress01.py
脚本。[student@servera ~]$ ./stress01.py & [1] 24079
在第一个终端中,运行 vmstat命令,更新之间延迟一秒钟并显示四个更新。
[student@servera ~]$ vmstat 1 4 procs ... ------cpu----- r b ... us sy id wa st ...output omitted...
在第二个终端中,运行 mpstat命令,更新之间延迟一秒钟并显示四个更新。
[student@servera ~]$ mpstat -P ALL 1 4 Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com) ... _x86_64_ (2 CPU) 08:35:31 PM CPU %usr ... %idle ...output omitted...
观察 vmstat和 mpstat 命令的 CPU 指标。
mpstat命令提供与 vmstat 命令相同的 CPU 使用率统计信息,但 mpstat 会按照各个处理器来显示统计信息。在下面的 mpstat命令输出中,
stress01.py
进程使用CPU0
来处理,因为运行用户空间代码所用时间占比约为 100%。进程在CPU0
上运行的事实因您的环境而异。procs ... ------cpu----- r b ... us sy id wa st 3 0 ... 4 0 95 0 0 1 0 ... 50 1 50 0 0 1 0 ... 50 0 50 0 0 ...output omitted...
Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com) ... _x86_64_ (2 CPU) ... CPU %usr ... %idle ... all 49.75 ... 49.75 ... 0 99.01 ... 0.00 ... 1 0.00 ... 100.00 ...output omitted... ... ... CPU %usr ... %idle ... all 50.00 ... 50.00 ... 0 100.00 ... 0.00 ... 1 0.00 ... 100.00 Average: CPU %usr ... %idle Average: all 49.88 ... 49.88 Average: 0 99.75 ... 0.00 Average: 1 0.00 ... 99.75
终止
stress01.py
进程。[student@servera ~]$ pkill stress01.py [1]+ Terminated ./stress01.py
运行
/home/student/dummy.sh
脚本时,请使用 iostat 命令来执行该脚本并监控系统行为。检查脚本代码,了解其用途。在第一个终端中,在后台执行
/home/student/dummy.sh
脚本。[student@servera ~]$ ./dummy.sh & [1] 1276
使用 iostat命令来监控磁盘 I/O 统计数据,更新四次,更新间隔为 1 秒钟。使用
-y
选项来忽略第一份报告,该报告提供自系统启动后的时间统计信息。此外,使用-z
选项来省略任何无活动设备的输出。[student@servera ~]$ iostat -yz 1 4 Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com) ... _x86_64_ (2 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.00 0.00 0.00 0.05 Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 410.00 0.00 1129.00 0 1129 avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 1.49 1.49 0.50 96.52 Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 396.00 0.00 1087.50 0 1087 avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 1.51 1.01 0.00 97.49 Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 404.00 0.00 1112.50 0 1112 avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 1.51 1.51 0.50 96.48 Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 400.00 0.00 1100.00 0 1100
观察输出中的
tps
、kB_read/s
和kB_wrtn/s
各列内容。从设备读取的数据量 (KB/s) 为零,表明没有读取事务。终止
dummy.sh
进程。[student@servera ~]$ kill -- -$(pgrep dummy.sh) [student@servera ~]$
打开
/home/student/dummy.sh
文件并检查脚本。该脚本在无限循环中写下 100MB 的文件。[student@servera ~]$ cat dummy.sh #!/bin/bash # Tell bash to exit after SIGINT trap exit INT # Write a 100MB file every loop while true; do dd if=/dev/zero of=100MBfile bs=512 count=200000 oflag=dsync done
执行
/home/student/stress.py
脚本,再运行 pidstat 命令以获取进程的 CPU 使用情况。此外,还要查看磁盘的 I/O 统计信息。在第一个终端中,在后台执行
/home/student/stress.py
脚本。[student@servera ~]$ ./stress.py & [1] 1578
使用 pidstat命令来监控
stress.py
进程的 CPU 使用情况,更新两次,间隔 1 秒钟。使用-p
选项来传递stress.py
进程的进程 ID。使用 pgrep stress.py命令来检索进程 ID。在下面的输出中,进程 ID 为
1578
。[student@servera ~]$ pgrep stress.py 1578 [student@servera ~]$ pidstat -p 1578 -u 1 2 Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com) ... _x86_64_ 2 CPU) ... UID PID %usr %system %guest %wait %CPU CPU Command ... 1000 1578 99.00 0.00 0.00 0.00 99.00 0 stress.py ... 1000 1578 100.00 0.00 0.00 0.00 100.00 0 stress.py Average:1000 1578 99.50 0.00 0.00 0.00 99.50 - stress.py
使用 pidstat -d命令查看磁盘 I/O 统计信息,并显示
stress.py
进程的两份报告。[student@servera ~]$ pidstat -p 1578 -d 1 2 Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com) ... _x86_64_ (2 CPU) ... UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command ... 1000 1578 0.00 0.00 0.00 0 stress.py ... 1000 1578 0.00 0.00 0.00 0 stress.py Average:1000 1578 0.00 0.00 0.00 0 stress.py
终止
stress.py
进程。[student@servera ~]$ pkill stress.py [1]+ Terminated ./stress.py
从当前日志文件报告 I/O 和传输速率统计、CPU0 使用率以及网络设备统计信息。不同系统和命令运行的输出会有所不同。为活动收集器记录数据留出更多时间。
使用 sar -b命令,从当前日志文件报告 I/O 和传输速率统计信息。
[student@servera ~]$ sar -b Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com) ... _x86_64_ (2 CPU) 15:50:54 LINUX RESTART (2 CPU) 03:55:01 PM tps rtps wtps bread/s bwrtn/s 03:56:01 PM 1.65 1.48 0.17 125.64 7.39 03:57:01 PM 352.26 0.04 352.23 1.19 1937.10 03:58:01 PM 400.27 0.01 400.26 0.71 2158.94 03:59:01 PM 406.37 0.00 406.37 0.00 2032.29 04:00:01 PM 629.46 0.01 629.45 0.24 2817.26 04:01:01 PM 454.50 0.03 454.48 0.96 2102.45 04:02:01 PM 415.62 0.01 415.61 0.69 2079.67 04:03:01 PM 0.03 0.00 0.03 0.00 0.36 04:04:01 PM 0.26 0.12 0.14 15.19 1.99 Average: 314.59 0.19 314.40 16.12 1553.52
使用 sar -P 0命令,从当前日志文件报告
CPU0
使用率。[student@servera ~]$ sar -P 0 Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com) ... _x86_64_ (2 CPU) 15:50:54 LINUX RESTART (2 CPU) ... CPU %user %nice %system %iowait %steal %idle ... 0 0.01 0.08 0.03 0.05 0.01 99.83 ... 0 0.03 0.00 1.59 1.05 0.41 96.92 ... 0 0.03 0.00 1.67 1.07 0.46 96.77 ... 0 0.04 0.00 1.69 1.03 0.48 96.76 ... 0 0.07 0.00 2.29 33.53 0.46 63.65 ... 0 15.12 0.00 2.09 13.96 0.40 68.43 ... 0 81.08 0.00 0.95 0.17 0.09 17.71 ... 0 0.00 0.00 0.01 0.00 0.01 99.99 ... 0 0.02 0.00 0.04 0.01 0.01 99.93 Average: 0 11.61 0.01 1.22 5.99 0.27 80.90
使用 sar -n DEV命令,从当前日志文件报告网络设备统计信息。
[student@servera ~]$ sar -n DEV Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com) ... _x86_64_ (2 CPU) 15:50:54 LINUX RESTART (2 CPU) ... IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s ... %ifutil ... lo 0.00 0.00 0.00 0.00 0.00 ... 0.00 ... enp1s0 0.91 0.31 0.07 0.05 0.00 ... 0.00 ... lo 0.00 0.00 0.00 0.00 0.00 ... 0.00 ... enp1s0 1.35 0.73 0.11 0.16 0.00 ... 0.00 ... lo 0.00 0.00 0.00 0.00 0.00 ... 0.00 ... enp1s0 1.07 0.53 0.07 0.13 0.00 ... 0.00 ...output omitted... Average:lo 0.00 0.00 0.00 0.00 0.00 ... 0.00 Average:enp1s0 1.40 0.70 0.11 0.16 0.00 ... 0.00
退出两个
servera
终端会话,以student
用户身份返回至workstation
。[student@servera ~]$ exit [student@workstation ~]$
完成
在 workstation
虚拟机上运行 lab perftools-sysstat finish 命令以完成本练习。此命令将删除练习中创建的资源。
[student@workstation ~]$ lab perftools-sysstat finish
本引导式练习到此结束。