Sysstat(System Statistics)是一个功能强大的开源工具集,用于监控 Linux 系统的性能和资源使用情况,特别适用于 Ubuntu 系统。它包含多个工具,如 sar
、iostat
、mpstat
和 pidstat
,帮助系统管理员实时或历史地分析 CPU、内存、磁盘 I/O、网络等资源的使用情况。本文将以 Ubuntu 系统为重点,从入门到精通,详细解析 Sysstat 的安装、配置、核心工具及其使用方法,并通过具体示例展示如何利用 Sysstat 进行系统性能监控。
1. Sysstat 简介
Sysstat 是一个轻量级、跨平台的性能监控工具集,广泛用于 Linux 系统(如 Ubuntu)。它通过收集系统活动数据,提供详细的性能统计信息,帮助优化系统性能、诊断问题。主要特点包括:
- 多工具支持:包含
sar
(系统活动报告)、iostat
(I/O 统计)、mpstat
(CPU 统计)、pidstat
(进程统计)等。 - 实时与历史数据:支持实时监控和历史数据分析。
- 灵活输出格式:支持 CSV、XML、JSON 等格式,便于数据可视化。
- 开源免费:基于 GPL v2 许可,社区活跃。
Sysstat 是 Ubuntu 系统管理员和开发者的必备工具,适用于服务器性能监控、问题排查和容量规划。
2. 安装 Sysstat on Ubuntu
以下是在 Ubuntu 系统上安装 Sysstat 的详细步骤。
2.1 使用 APT 安装
Ubuntu 的默认软件仓库包含 Sysstat,安装过程简单:
-
更新软件包索引:
sudo apt update
确保系统软件包列表是最新的。
-
安装 Sysstat:
sudo apt install sysstat
这将安装 Sysstat 及其依赖项。
-
验证安装:
检查 Sysstat 版本:sar -V
输出示例:
sysstat version 12.6.0 (C) Sebastien Godard (sysstat <at> orange.fr)
确认其他工具:
iostat -V mpstat -V pidstat -V
2.2 从源码安装(可选)
若需要最新版本,可从 Sysstat GitHub 下载源码。以下是步骤(以 2025 年最新版本 12.7.5 为例,检查 Sysstat GitHub 获取最新版本):
- 安装依赖:
sudo apt install build-essential
- 下载源码:
wget https://github.com/sysstat/sysstat/archive/refs/tags/v12.7.5.tar.gz tar -xzf v12.7.5.tar.gz cd sysstat-12.7.5
- 配置和编译:
./configure --prefix=/usr make sudo make install
--prefix=/usr
:确保二进制文件安装到/usr/bin
。
- 验证安装:
/usr/bin/sar -V
2.3 启用 Sysstat 数据收集
Sysstat 默认不启用数据收集,需手动配置:
-
编辑配置文件:
sudo nano /etc/default/sysstat
将以下行:
ENABLED="false"
改为:
ENABLED="true"
保存并退出。
-
启动 Sysstat 服务:
sudo systemctl enable sysstat sudo systemctl start sysstat
enable
:设置开机自启。start
:立即启动服务。
-
验证服务状态:
sudo systemctl status sysstat
输出示例:
● sysstat.service - sysstat performance monitoring data collectorLoaded: loaded (/lib/systemd/system/sysstat.service; enabled; vendor preset: enabled)Active: active (exited) since Thu 2025-04-17 12:00:01 UTC; 5min ago
确保状态为
active (exited)
。 -
检查数据文件:
Sysstat 默认每 10 分钟收集数据,存储在/var/log/sysstat
目录。查看文件:ls /var/log/sysstat
数据文件以
saDD
命名(如sa17
表示 17 日的数据)。
3. Sysstat 核心工具
Sysstat 包含多个工具,每个工具专注于特定方面的性能监控。以下是主要工具及其功能:
工具 | 功能描述 |
---|---|
sar | 系统活动报告,监控 CPU、内存、磁盘 I/O、网络等,提供实时和历史数据。 |
iostat | 报告 CPU 和 I/O 统计,分析磁盘和设备性能。 |
mpstat | 显示 CPU 使用情况,支持多核和虚拟化环境。 |
pidstat | 监控进程级别的资源使用(CPU、内存、I/O 等)。 |
nfsiostat | 监控 NFS(网络文件系统)的 I/O 性能。 |
cifsiostat | 监控 CIFS(通用互联网文件系统)的 I/O 性能。 |
sadc | 系统活动数据收集器,后台收集数据供 sar 使用。 |
sa1 | 与 sadc 配合,定期收集数据并存储到二进制文件中。 |
sa2 | 生成每日总结报告,基于 sadc 收集的数据。 |
sadf | 将 sar 数据转换为 CSV、XML、JSON 等格式,便于分析和可视化。 |
4. 核心工具使用详解(带示例)
以下通过具体示例,逐步展示如何在 Ubuntu 上使用 Sysstat 的核心工具监控系统性能。
4.1 sar
:系统活动报告
sar
是 Sysstat 的核心工具,用于收集和报告系统资源使用情况。数据存储在 /var/log/sysstat/saXX
文件中。
实时监控 CPU 使用率
查看每 2 秒的 CPU 使用率,共 5 次:
sar -u 2 5
输出示例:
Linux 5.15.0-73-generic (ubuntu) 04/17/2025 _x86_64_ (4 CPU)12:00:01 CPU %user %nice %system %iowait %steal %idle
12:00:03 all 10.25 0.00 2.50 0.75 0.00 86.50
12:00:05 all 12.00 0.00 3.25 1.00 0.00 83.75
...
Average: all 11.50 0.00 2.88 0.88 0.00 84.75
%user
:用户态 CPU 使用率。%system
:内核态 CPU 使用率。%iowait
:等待 I/O 的 CPU 时间。%idle
:空闲 CPU 时间。
查看历史 CPU 数据
查看当天的 CPU 数据:
sar -u
查看特定日期(例如 17 日):
sar -u -f /var/log/sysstat/sa17
监控内存使用
查看内存使用情况:
sar -r 2 5
输出示例:
12:00:01 kbmemfree kbavail kbmemused %memused
12:00:03 1024000 2048000 6144000 75.00
...
kbmemfree
:空闲内存(KB)。kbavail
:可用内存(包括缓存)。%memused
:内存使用百分比。
监控磁盘 I/O
查看块设备 I/O 统计:
sar -b 2 5
输出示例:
12:00:01 tps rtps wtps bread/s bwrtn/s
12:00:03 15.50 5.25 10.25 1024.00 2048.00
...
tps
:每秒传输次数。bread/s
:每秒读取的块数。bwrtn/s
:每秒写入的块数。
4.2 iostat
:I/O 和 CPU 统计
iostat
用于监控 CPU 和磁盘 I/O 性能。
查看 CPU 和设备统计
基本用法:
iostat
输出示例:
Linux 5.15.0-73-generic (ubuntu) 04/17/2025 _x86_64_ (4 CPU)avg-cpu: %user %nice %system %iowait %steal %idle10.50 0.00 3.00 1.50 0.00 85.00Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 15.20 512.00 1024.00 524288 1048576
- CPU 部分显示用户态、系统态等使用率。
- 设备部分显示每秒传输次数(
tps
)、读写速度等。
实时监控磁盘 I/O
每 2 秒刷新磁盘统计:
iostat -d 2
输出示例:
Device tps kB_read/s kB_wrtn/s
sda 14.50 480.00 960.00
扩展统计
显示详细 I/O 统计:
iostat -x 2
输出包括 %util
(设备利用率),可用于识别磁盘瓶颈。
4.3 mpstat
:CPU 统计
mpstat
显示 CPU 使用情况,支持多核环境。
查看所有 CPU 统计
基本用法:
mpstat
输出示例:
Linux 5.15.0-73-generic (ubuntu) 04/17/2025 _x86_64_ (4 CPU)12:00:01 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
12:00:01 AM all 10.50 0.00 3.00 1.50 0.00 0.25 0.00 0.00 0.00 85.00
查看每个 CPU 核心
显示每个 CPU 核心的统计:
mpstat -P ALL 2 5
输出示例:
12:00:01 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
12:00:03 AM 0 12.00 0.00 2.50 1.00 0.00 0.00 0.00 0.00 0.00 84.50
12:00:03 AM 1 8.50 0.00 3.00 2.00 0.00 0.00 0.00 0.00 0.00 86.50
...
-P ALL
:显示所有 CPU 核心。
4.4 pidstat
:进程级统计
pidstat
监控特定进程的资源使用情况。
监控所有进程的 CPU 使用
基本用法:
pidstat
输出示例:
Linux 5.15.0-73-generic (ubuntu) 04/17/2025 _x86_64_ (4 CPU)12:00:01 AM UID PID %usr %system %guest %wait %CPU CPU Command
12:00:01 AM 1000 1234 5.00 2.00 0.00 1.50 7.00 0 firefox
12:00:01 AM 0 5678 3.50 1.50 0.00 0.50 5.00 1 systemd
实时监控特定进程
监控 PID 为 1234 的进程,每 2 秒刷新:
pidstat -p 1234 2
监控进程的 I/O
查看进程的磁盘 I/O:
pidstat -d 2
输出示例:
12:00:01 AM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
12:00:03 AM 1000 1234 256.00 512.00 0.00 firefox
4.5 sadf
:数据格式化输出
sadf
将 sar
数据转换为 CSV、XML 或 JSON 格式,便于分析。
导出为 CSV
将当天的 CPU 数据导出为 CSV:
sadf -d /var/log/sysstat/sa17 -- -u
输出示例:
# hostname;interval;timestamp;CPU;%user;%nice;%system;%iowait;%steal;%idle
ubuntu;2;2025-04-17 12:00:03;-1;10.25;0.00;2.50;0.75;0.00;86.50
...
导出为 JSON
sadf -j /var/log/sysstat/sa17 -- -u
5. 配置 Sysstat 数据收集
Sysstat 默认每 10 分钟收集一次数据,适合大多数场景。若需更频繁或自定义收集频率,可修改配置。
5.1 修改数据收集频率
-
编辑 cron 配置:
Sysstat 使用 cron 定时收集数据,配置文件位于:sudo nano /etc/cron.d/sysstat
默认配置示例:
# Run system activity accounting tool every 10 minutes */10 * * * * root /usr/lib/sysstat/sa1 1 1
修改为每 2 分钟收集:
*/2 * * * * root /usr/lib/sysstat/sa1 1 1
保存并退出。
-
重启 cron 服务:
sudo systemctl restart cron
-
验证数据收集:
等待几分钟,检查新数据文件:ls -l /var/log/sysstat
5.2 调整数据保留时间
Sysstat 默认保留 7 天的数据,可通过修改 /etc/sysstat/sysstat
调整:
sudo nano /etc/sysstat/sysstat
查找 HISTORY
参数,默认值为:
HISTORY=7
改为保留 30 天:
HISTORY=30
保存并重启服务:
sudo systemctl restart sysstat
6. 示例:排查 Ubuntu 服务器性能问题
假设 Ubuntu 服务器响应缓慢,CPU 和磁盘负载高,我们使用 Sysstat 排查问题。
6.1 检查 CPU 使用率
运行:
mpstat -P ALL 2 5
输出显示 CPU 0 使用率高达 90%,其他核心正常。
6.2 定位高 CPU 进程
运行:
pidstat 2
发现 PID 1234(apache2
进程)占用大量 CPU。
6.3 检查磁盘 I/O
运行:
iostat -x 2
发现 sda
的 %util
接近 100%,表示磁盘饱和。
6.4 定位高 I/O 进程
运行:
pidstat -d 2
确认 apache2
进程有高 kB_wr/s
。
6.5 分析历史数据
查看当天 CPU 和 I/O 趋势:
sar -u -f /var/log/sysstat/sa17
sar -b -f /var/log/sysstat/sa17
确认问题在高峰期(如 12:00-14:00)加剧。
6.6 解决方案
- 优化
apache2
配置(如减少 worker 线程):
调整sudo nano /etc/apache2/mods-enabled/mpm_prefork.conf
MaxRequestWorkers
值。 - 升级磁盘(如从 HDD 到 SSD)。
- 启用缓存(如 Memcached):
sudo apt install memcached
6.7 验证优化效果
重启服务后,重新监控:
sar -u 2 5
iostat -x 2
确认 CPU 和磁盘负载下降。
7. 高级使用技巧
以下是一些高级用法,帮助在 Ubuntu 上更高效地使用 Sysstat。
7.1 自动化监控脚本
编写脚本定期收集数据并生成报告:
#!/bin/bash
DATE=$(date +%Y%m%d)
sadf -d /var/log/sysstat/sa${DATE:6:2} -- -u > /home/user/cpu_stats_$DATE.csv
sadf -d /var/log/sysstat/sa${DATE:6:2} -- -r > /home/user/mem_stats_$DATE.csv
sadf -d /var/log/sysstat/sa${DATE:6:2} -- -b > /home/user/io_stats_$DATE.csv
- 保存为
monitor_sysstat.sh
,添加执行权限:chmod +x /home/user/monitor_sysstat.sh
- 设置 cron 定时任务:
添加:crontab -e
每天凌晨运行脚本。0 0 * * * /home/user/monitor_sysstat.sh
7.2 可视化数据
将 sadf
导出的 CSV 数据导入 Grafana 或 Excel:
- 安装 Grafana(可选):
sudo apt install -y apt-transport-https software-properties-common sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main" sudo apt update sudo apt install grafana sudo systemctl enable grafana-server sudo systemctl start grafana-server
- 配置 CSV 数据源,导入
/home/user/cpu_stats_*.csv
。 - 创建仪表盘,绘制 CPU、内存、I/O 图表。
7.3 监控 NFS 或 CIFS
若 Ubuntu 服务器使用 NFS 文件系统,监控其性能:
nfsiostat 2
输出示例:
nfs_server:/mnt/nfsread: 512.00 kB/s 10.50 IOPSwrite: 1024.00 kB/s 15.25 IOPS
8. 从入门到精通的学习路径
- 入门:
- 安装 Sysstat,启用数据收集。
- 掌握
sar
、iostat
、mpstat
的基本用法,监控 CPU、内存、I/O。 - 练习查看实时和历史数据。
- 进阶:
- 使用
pidstat
监控进程级性能。 - 配置更频繁的数据收集,导出 CSV/JSON 数据。
- 结合多个工具分析系统瓶颈。
- 使用
- 精通:
- 编写自动化监控脚本,集成到运维流程。
- 使用 Grafana 可视化数据。
- 深入分析多核、虚拟化环境或 NFS/CIFS 的性能问题。
9. 总结
Sysstat 是一个功能全面的性能监控工具集,在 Ubuntu 上通过 sar
、iostat
、mpstat
和 pidstat
等工具,管理员可以全面了解系统的 CPU、内存、磁盘和进程性能。从安装、配置到高级使用,Sysstat 提供了灵活的监控和分析功能,适合从个人开发环境到生产服务器的各种场景。通过实践和探索,你可以熟练使用 Sysstat,从入门者成长为精通 Ubuntu 系统性能优化的专家。
如果需要更具体的配置、场景分析或集成其他工具(如 Prometheus),请提供详细信息,我可以进一步定制指导!