ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

sysstat-11.5.6 源码编译部署与性能采集实战指南

sysstat-11.5.6 源码编译部署与性能采集实战指南 简介sysstat-11.5.6.tar.gz 是面向 Linux 系统管理员与运维工程师的性能监控工具源码包用于采集和分析 CPU 利用率、磁盘 I/O、内存与网络流量等关键指标帮助定位 I/O 瓶颈、评估多处理器负载分布并排查系统故障。包内共 177 个文件以 25 个 c 源文件、19 个 h 头文件、35 个 po 本地化文件及 25 个 in 模板为主另含 configure 配置脚本、install 安装脚本、man 手册与 cron 相关脚本压缩包约 597KB便于在自有 Linux 环境编译安装。资源涵盖 iostat、mpstat、vmstat、sadc、sadf、sa1 与 sa2 等核心组件可支撑日常性能巡检、报表定制与持续监控。目前已有 470 人学习下载适合需要深入理解系统运行状态、进行性能调优与故障排查的中高级运维人员参考使用。1. sysstat-11.5.6.tar.gz 到手之后一个运维老兵的拆包与落地判断凌晨两点监控大屏上某台数据库服务器的 CPU 曲线突然拉满但业务侧没有任何慢查询告警。你登上机器第一反应是敲top可它只告诉你“谁在吃 CPU”不告诉你“过去 15 分钟到底发生了什么”。这时候真正能救命的是sar——而sar就藏在 sysstat-11.5.6.tar.gz 这个不到 1MB 的源码包里。sysstat 是 Linux 上最经典的系统性能采集工具集包含 sar、iostat、mpstat、pidstat、sadf 等命令几乎每一台生产服务器都预装或应该预装它。但很多人只把它当“系统自带命令”从没想过源码包里的版本差异、编译参数和采集策略会直接影响数据可信度。这篇笔记面向需要在离线环境、老旧发行版或定制镜像里部署 sysstat 的运维和 SRE把 tar.gz 从解压到跑通、从参数到踩坑讲透让你下次面对性能黑匣子时手里有牌可打。2. 从 tar.gz 到可执行文件sysstat 的编译链路与依赖决策2.1 为什么不用包管理器偏要碰源码包绝大多数场景下yum install sysstat或apt install sysstat就够了但有几类情况必须回到源码一是内网离线服务器软件源不可达二是发行版仓库里的 sysstat 版本太老缺少--dec0高精度输出或pidstat -w的某些字段三是需要自定义--enable-collect-all之类的编译选项把默认不开启的采集项打开。sysstat-11.5.6.tar.gz 这个版本号本身就是一个信号——11.x 系列在 10.x 基础上重构了数据文件格式sar的二进制日志兼容性有变化跨版本读取旧数据会翻车。所以拿到 tar.gz 的第一件事不是急着./configure而是确认目标机器的 glibc 版本和内核版本因为 sysstat 的采集能力受内核接口限制编译参数只是“开关”内核没有的指标它变不出来。2.2 解压、配置、编译的最小命令序列# 解压到当前目录生成 sysstat-11.5.6 文件夹 tar -zxvf sysstat-11.5.6.tar.gz cd sysstat-11.5.6 # 查看 configure 支持的选项重点看采集相关开关 ./configure --help | grep -E collect|sadc|history # 典型配置安装到 /usr/local开启全部采集项指定 cron 目录 ./configure --prefix/usr/local --enable-collect-all --with-cron-dir/etc/cron.d # 编译并安装-j 加速但注意内存不足时会 OOM make -j4 sudo make install--enable-collect-all是关键参数它让sadc采集包括中断、上下文切换、内存分页在内的完整指标默认配置下部分指标是关闭的事后想补采只能等下一个周期。--with-cron-dir决定自动采集任务写到哪里如果目标机器用 systemd timer 而非 cron这个参数可以跳过后续手动配 timer。make -j4的并行度按 CPU 核数调整小内存机器建议-j2甚至不加-j否则编译到sa_common.c时容易因内存不足被 OOM Killer 干掉这是血泪经验。2.3 安装后必须立刻验证的三件事编译安装完成不等于能用。第一检查sar -V输出的版本号是否与 tar.gz 一致避免 PATH 里旧版本抢先第二确认/usr/local/lib/sa/目录存在且sadc有执行权限否则采集任务静默失败第三手动跑一次sadc 1 1 -看能否输出到标准输出这一步能暴露 90% 的权限和库依赖问题。常见翻车是sadc依赖libsensors但编译时没检测到运行时报error while loading shared libraries解决方法是回头./configure时加上--disable-sensors或补装开发包重新编译。3. 让数据真正落盘sadc 采集策略与 sar 读取参数3.1 采集频率与保留周期怎么定才不丢关键窗口sysstat 默认的 cron 任务每 10 分钟采集一次保留 7 天。这个默认值对排查“凌晨两点 CPU 拉满”这类问题往往不够——10 分钟粒度会平滑掉短时尖峰。我一般会把采集间隔改成 1 分钟保留周期按磁盘空间反推单个数据文件约 100KB/天取决于采集项数量保留 30 天大约 3MB对现代磁盘毫无压力。修改/etc/cron.d/sysstat或对应的 systemd timer把*/10 * * * *改成* * * * *同时调整sa1脚本里的HISTORY变量控制保留天数。注意采集频率不是越高越好1 秒级采集会显著增加sadc的 CPU 占用在已经高负载的机器上可能变成“观测者效应”把被观测系统压垮。3.2 sar 读取历史数据的常用参数组合# 读取当天 CPU 使用率每 1 分钟一行显示 8:00 到 9:00 sar -u -s 08:00:00 -e 09:00:00 -f /var/log/sa/sa$(date %d) # 查看内存分页和交换活动定位内存压力 sar -B -f /var/log/sa/sa15 # 查看网络接口统计-n DEV 指定设备维度 sar -n DEV 1 5 # 用 sadf 把二进制数据转成 CSV方便导入分析平台 sadf -d /var/log/sa/sa15 -- -u cpu_usage.csv-s和-e指定起止时间格式必须是HH:MM:SS只写08:00会被解析成错误时间导致空输出。-f指定数据文件sa$(date %d)是当天文件读历史日期要手动改数字。sadf -d的--后面跟的是传给sar的参数这个语法容易写错--前后空格不能省。CSV 输出里时间戳是 Unix 秒导入 Excel 需要转换这是很多人第一次用 sadf 时卡住的地方。3.3 数据文件格式的版本兼容边界sysstat 11.x 的数据文件格式与 10.x 不兼容用 11.5.6 的sar读 10.x 生成的sa文件会报Invalid system activity file。反过来旧版sar读新版文件同样失败。这意味着滚动升级时新旧数据文件不能混用排查跨升级周期的历史问题需要保留旧版二进制或提前用sadf导出为文本。这个坑在容器化环境里更隐蔽——基础镜像里的 sysstat 版本和宿主机不一致sar读不到宿主机的数据文件还以为是权限问题。4. 避坑与排查sysstat 部署中最容易翻车的五件事4.1 采集任务静默失败sar 读不到当天数据现象sar -u报Cannot open /var/log/sa/sa15: No such file or directory但 cron 任务看起来在跑。原因通常是sadc写文件的目录权限不对或者 cron 环境变量 PATH 里找不到sadc。解决检查/var/log/sa目录属主是否为root:root且权限755在 cron 任务里用绝对路径/usr/local/lib/sa/sadc而非裸命令并在sa1脚本开头显式export PATH/usr/local/bin:/usr/bin:/bin。4.2 编译时找不到 sensors 库导致功能缺失现象./configure输出里Checking for sensors... no编译出的sadc无法采集温度和风扇数据。原因目标机器没装lm_sensors-devel或libsensors4-dev。解决离线环境提前下载对应 rpm/deb 包安装或者接受功能缺失在 configure 时显式--disable-sensors避免后续运行时报动态库错误。4.3 sar 输出时间戳与本地时区差 8 小时现象sar -u -f sa15显示的时间比实际早或晚 8 小时。原因sadc采集时使用 UTC 时间戳sar读取时按TZ环境变量转换如果 cron 环境和登录 shell 的TZ不一致就会错位。解决在/etc/cron.d/sysstat里加TZAsia/Shanghai或者统一用sadf -d导出 UTC 时间戳后自行转换避免依赖本地时区。4.4 高频率采集把磁盘写满现象/var/log/sa目录几天内膨胀到几个 GB。原因采集间隔改成 1 分钟后忘了调整HISTORY保留天数或者--enable-collect-all打开了所有指标导致单文件体积翻倍。解决用du -sh /var/log/sa定期检查在sa1脚本里设置HISTORY7并确认sa2清理任务正常执行必要时给/var/log单独挂载分区设配额。4.5 pidstat 看不到进程级数据现象pidstat -u 1输出为空或只有表头。原因内核编译时未开启CONFIG_TASK_DELAY_ACCT或CONFIG_TASK_IO_ACCOUNTINGsysstat 拿不到进程级统计。解决grep TASK_DELAY_ACCT /boot/config-$(uname -r)确认内核配置没有的话只能换内核或放弃进程级监控改用sar -u的系统级数据做粗粒度分析。5. 把 sysstat 数据用起来sadf 导出与自动化巡检脚本5.1 用 sadf 把二进制日志变成可分析的数据流sar适合人眼看sadf适合机器读。下面这个脚本每天凌晨把前一天的sa文件导出为 CSV并计算 CPU 使用率超过 80% 的时间段输出到巡检报告。#!/bin/bash # 导出前一天数据注意日期计算跨月边界 YESTERDAY$(date -d yesterday %d) SA_FILE/var/log/sa/sa${YESTERDAY} OUT_CSV/tmp/cpu_$(date -d yesterday %Y%m%d).csv # -d 输出 CSV-- 后跟 sar 参数-u 表示 CPU sadf -d $SA_FILE -- -u $OUT_CSV # 用 awk 找出 %user %system 超过 80 的行 awk -F; NR1 ($4$5)80 {print $3, $4, $5} $OUT_CSV \ /tmp/high_cpu_$(date -d yesterday %Y%m%d).txt # 如果存在高负载记录打印前 10 条 if [ -s /tmp/high_cpu_$(date -d yesterday %Y%m%d).txt ]; then echo High CPU periods detected: head -10 /tmp/high_cpu_$(date -d yesterday %Y%m%d).txt fi脚本里sadf -d输出的 CSV 用分号分隔字段顺序是hostname;interval;timestamp;CPU;%user;%nice;%system;%iowait;...所以$4是%user$5是%system。date -d yesterday在跨月时可能出错生产环境建议用date -d 1 day ago %d并处理月初边界。这个脚本可以挂到 cron 里每天跑输出结果推送到巡检群或写入日志平台。5.2 一个我坚持了五年的习惯每次在新机器上部署完 sysstat我一定会手动制造一次负载——stress-ng --cpu 2 --timeout 60s——然后立刻sar -u 1 10看数据是否如实反映。这个动作花不了一分钟但能验证采集链路、权限、时区、版本兼容性全部正常。很多次就是靠这个习惯在真正出故障之前发现了sadc没写权限或者 cron 没生效的问题。sysstat 这类工具的价值不在于装上了而在于你需要它的那一刻它真的有数据。希望帮到你。本文还有配套的精品资源点击获取
返回列表