☰
sysstat 11.5.6 源码编译安装与性能监控实战指南
2026/10/27 2:11:51 网站建设 项目流程

简介:sysstat-11.5.6.tar.gz 是面向 Linux 系统管理员与运维工程师的系统性能监控工具源码包,用于采集和分析 CPU 利用率、磁盘 I/O、内存与进程状态等关键指标,帮助定位 I/O 瓶颈、评估多核负载分布并排查系统故障。包内共 177 个文件,以 25 个 c 源文件与 19 个 h 头文件构成核心实现,35 个 po 与 25 个 in 文件支撑多语言与配置模板,另含 configure 构建脚本、man 手册页及 cron 定时采集相关脚本,压缩包约 597KB,体积轻量、结构完整,便于自行编译安装。资源涵盖 iostat、mpstat、vmstat、sadc、sadf 及 sa1/sa2 等核心组件,读者可据此搭建持续性能采集与报表分析环境,理解各工具的数据来源与指标含义,为服务器调优和稳定性保障提供依据。目前已有 472 人学习下载,适合具备一定 Linux 基础、希望深入掌握系统监控与性能分析的中高级用户参考。

1. 从一台“看不出瓶颈”的机器说起:sysstat 11.5.6 到底装的是什么

上周帮人看一台跑着业务服务的机器,CPU 不高、内存也够,可应用日志里全是超时。登上去敲top,一切正常;敲free -m,也正常。问题就出在这——top只给你看“此刻”,而性能问题往往藏在“过去十分钟”。这台机器上iostat、sar、mpstat一个都没有,等于没有黑匣子。sysstat 11.5.6.tar.gz 就是补上这套黑匣子的源码包,它包含iostat、sar、mpstat、pidstat、sadf等一整套采集与回看工具。装它不难,难在编译参数、采集开关和 systemd 定时器这三处,装不好就是“命令有了、数据没有”。这篇按我实际部署的顺序走一遍,适合刚接手 Linux 服务器、需要自己从源码装监控工具的人。

2. 装前把环境列清:sysstat 11.5.6 的依赖、版本与目录规划

2.1 为什么选 11.5.6 这个源码包,而不是发行版自带的

发行版仓库里的 sysstat 版本普遍偏旧,常见是 11.x 早期或 12.x 之前的分支,iostat的-x扩展输出字段少,sar对某些新内核的/proc字段解析也不全。11.5.6 属于 11.x 系列里比较靠后的维护版本,iostat -x已经能给出r_await、w_await、aqu-sz这些判断磁盘饱和度的关键列,pidstat的线程级统计也稳定。选源码包还有一个现实原因:目标机器可能连不上外网仓库,或者仓库被锁在某个旧快照上,手里只有一个 tar.gz,那就只能编译。

需要提醒的是,11.5.6 是 11.x 分支,不是 12.x。12.x 改了配置文件的默认路径和部分采集项的命名,网上很多教程混着写,照着抄会踩坑。这篇只谈 11.5.6 的行为,命令输出和配置项都以这个版本为准。

2.2 编译依赖清单与检查命令

sysstat 本身依赖不多,但少一个就编译失败。我一般先跑一遍检查,把缺的补齐再解压,省得编译到一半报错。

# 检查编译工具链与关键依赖,缺哪个补哪个 which gcc make gettext rpm -q glibc-devel 2>/dev/null || dpkg -l libc6-dev 2>/dev/null | tail -1 ls /usr/include/ncurses.h 2>/dev/null || echo "ncurses-devel missing"

gcc和make是编译基础;gettext提供msgfmt,sysstat 的--enable-nls多语言支持要用到它,不加这个选项可以跳过;glibc-devel(Debian 系叫libc6-dev)提供头文件;ncurses头文件在开启--enable-color彩色输出时才需要。我一般会装全,因为彩色输出在终端里看iostat的告警列更直观。

常见做法是 CentOS/RHEL 系用yum install -y gcc make gettext ncurses-devel,Debian/Ubuntu 系用apt install -y gcc make gettext libncurses-dev。如果机器完全离线,就得提前把对应 rpm/deb 包和依赖一起带过去,这一步没有捷径。

2.3 目录规划:源码、安装前缀、配置、数据各放哪

sysstat 默认装到/usr/local,配置在/etc/sysconfig/sysstat(部分发行版)或/etc/default/sysstat,采集数据默认落在/var/log/sa/。我习惯保持默认前缀,因为sar和sadc内部对路径有硬编码预期,改前缀后定时任务容易找不到数据目录。

用途路径说明
源码解压/usr/local/src/sysstat-11.5.6编译目录,装完可删
安装前缀/usr/local--prefix默认值,不建议改
主配置/etc/sysconfig/sysstat采集间隔、保留天数
采集数据/var/log/sa/saDD二进制文件与sarDD文本
定时任务/etc/cron.d/sysstat或 systemd timer二选一,别同时开

提示:如果机器上已经用包管理器装过 sysstat,先rpm -e sysstat或apt remove sysstat卸掉,否则/usr/bin/iostat和/usr/local/bin/iostat会打架,which出来的版本和你以为的不一样。

3. 编译安装 sysstat 11.5.6:configure 参数怎么选、make 报错怎么读

3.1 解压与 configure:三个值得改的开关

拿到 tar.gz 后先解压进源码目录,然后跑configure。默认参数能装,但有几个开关值得按场景调。

tar -xzf sysstat-11.5.6.tar.gz -C /usr/local/src/ cd /usr/local/src/sysstat-11.5.6 # 典型 configure:开启彩色输出、NLS、历史数据压缩 ./configure \ --prefix=/usr/local \ --enable-color \ --enable-nls \ --disable-strip

--prefix=/usr/local是默认值,写出来是为了让后面make install的落点明确;--enable-color让iostat、mpstat在终端里用颜色标出异常值,脚本里重定向时会自动关闭,不影响解析;--enable-nls启用多语言,机器上没装gettext就别加,否则configure直接报msgfmt not found;--disable-strip保留符号表,出问题时gdb能看出调用栈,生产环境嫌体积大可以去掉。

configure跑完会打印一份摘要,重点看Checking for ...那几行有没有no。我见过一次ncurses显示no,原因是头文件在/usr/include/ncurses/下而configure只找/usr/include/,加CPPFLAGS=-I/usr/include/ncurses重跑即可。

3.2 make 与 make install:报错定位的固定套路

make -j"$(nproc)" 2>&1 | tee /tmp/sysstat-build.log make install

-j按核数并行编译,tee把日志留一份,编译失败时不用重跑就能翻。sysstat 编译报错集中在两类:一是缺头文件,报fatal error: xxx.h: No such file or directory,按文件名反查是哪个-devel包没装;二是ld阶段报undefined reference,多半是configure时某个库检测通过但链接路径没带上,回头看清config.log里对应库的检测结果。

make install会把二进制装到/usr/local/bin,手册到/usr/local/share/man,同时生成/etc/sysconfig/sysstat(若不存在)和/etc/cron.d/sysstat。装完先别急着开采集,下一章先确认命令本身能用。

3.3 装完立刻验证二进制与版本

/usr/local/bin/iostat -V /usr/local/bin/sar -V echo $PATH | tr ':' '\n' | grep -n local

-V输出应为sysstat version 11.5.6。如果显示的是别的版本,说明PATH里/usr/bin排在/usr/local/bin前面,旧包没卸干净。echo $PATH那行是确认顺序,必要时在/etc/profile.d/下加一段把/usr/local/bin提前,或者干脆把旧包卸掉。这一步看着琐碎,但后面所有排错都建立在“你敲的到底是哪个 iostat”上。

4. 配置采集与定时任务:让 sar 真正留下历史数据

4.1 主配置文件:三个参数决定数据留多久、多细

sysstat 11.5.6 的采集行为由/etc/sysconfig/sysstat控制,核心就三个变量。

# /etc/sysconfig/sysstat 关键项 HISTORY=7 # 历史数据保留天数,默认 7 COMPRESSAFTER=10 # 超过 10 天的 sa 文件用 sa1 压缩 SADC_OPTIONS="-S DISK" # 额外采集磁盘统计,默认只采 CPU/内存等

HISTORY=7表示sa文件保留一周,排查“昨天下午的抖动”够用;要查更久就调大,代价是/var/log/sa/占空间,一个中等负载机器每天sa文件约几 MB,按天估算即可。COMPRESSAFTER配合HISTORY用,超过天数的文件压缩存放,省空间但sar读取时会自动解压,不影响使用。SADC_OPTIONS="-S DISK"是我必加的,默认采集项里磁盘统计不全,不加这行sar -d会提示没有数据。

注意:改完配置要重启采集服务或等下一次定时任务生效,直接敲sar看到的还是旧配置采出来的数据。

4.2 定时任务:cron 与 systemd timer 二选一

11.5.6 的make install默认写/etc/cron.d/sysstat,内容大致是每 10 分钟跑一次sa1、每天 23:53 跑一次sa2生成日报。如果目标系统用 systemd 且禁用了 cron,就得换成 timer。

# 查看默认 cron 任务 cat /etc/cron.d/sysstat # systemd 环境下启用自带 timer(若发行版提供 unit 文件) systemctl enable --now sysstat-collect.timer systemctl enable --now sysstat-summary.timer systemctl list-timers | grep sysstat

cron 方案简单直接,*/10 * * * * root /usr/local/lib/sa/sa1 1 1这行的含义是每 10 分钟采一次、每次采 1 秒间隔 1 次。systemd timer 方案的好处是日志进 journal、失败可见,但 unit 文件里的ExecStart路径要指向/usr/local/lib/sa/sa1,因为我们是源码装的,路径和包管理器版本不同。两套别同时开,否则同一分钟采两次,sar汇总时数据会重复。

4.3 手动跑一次采集,确认数据落盘

# 手动触发一次采集,间隔 1 秒采 3 次 /usr/local/lib/sa/sa1 1 3 ls -lh /var/log/sa/ # 用 sar 回看刚采的数据 /usr/local/bin/sar -u -f /var/log/sa/sa$(date +%d)

sa1 1 3的参数是“间隔秒数 采集次数”,跑完/var/log/sa/下应出现当天的saDD文件。sar -u -f指定文件回看 CPU,能出数据说明采集链路通了。这一步是分水岭:命令能跑不代表数据在采,很多“sar 没数据”的问题就卡在这里没验证。

5. 避坑与排查:sysstat 11.5.6 装完最常见的五个翻车点

5.1 iostat 报 “No such file or directory” 找不到 /proc/diskstats

现象是敲iostat直接报错退出,提示读不到/proc/diskstats。原因通常是内核太旧或容器环境里/proc没挂全,sysstat 11.5.6 依赖这个文件拿磁盘统计。解决是先cat /proc/diskstats确认文件存在且有内容;容器里要确保启动时挂载了宿主/proc,或者改用--host方式在宿主机采集。内核低于 2.6.25 的环境基本无解,只能升级内核或用别的工具。

5.2 sar 能跑但 -d 没数据,磁盘统计一片空白

现象是sar -u正常,sar -d提示 “No data”。原因是SADC_OPTIONS没加-S DISK,默认采集项不含磁盘。解决是编辑/etc/sysconfig/sysstat加上SADC_OPTIONS="-S DISK",然后重启采集或等下一个采集周期。已经采过的历史数据补不回来,只能从改配置之后开始有。

5.3 定时任务跑了但 /var/log/sa 一直是空的

现象是crontab或 timer 显示在跑,目录里却没文件。原因有两个常见分支:一是 cron 里的sa1路径还指向/usr/lib/sa/sa1(包管理器版本的位置),源码装的实际在/usr/local/lib/sa/sa1,任务静默失败;二是/var/log/sa权限不对,sa1以 root 跑但目录属主被改过。解决是grep sa1 /etc/cron.d/sysstat核对路径,ls -ld /var/log/sa确认属主 root、权限 755,再手动跑一次sa1看报错。

5.4 新旧版本混装,iostat 输出字段对不上教程

现象是照着网上教程找iostat -x的某一列,自己的输出里没有。原因是PATH里旧版/usr/bin/iostat优先,或者旧包没卸干净。解决是which -a iostat列出所有副本,/usr/local/bin/iostat -V确认版本,卸掉包管理器版本并在/etc/profile.d/里把/usr/local/bin提前。这一步不做,后面所有参数对照都是错的。

5.5 采集频率过高把机器自己拖慢

现象是装完 sysstat 后负载轻微上升,sar自身进程频繁出现。原因是sa1间隔设得太小,比如改成每 1 分钟一次,且SADC_OPTIONS开了全部采集项。sysstat 采集本身开销不大,但高频加全量采集在低配机器上会累积。解决是把间隔回到 10 分钟,采集项按需开,只加-S DISK这类真正要看的,别一股脑全开。

6. 装完怎么验证跑通:三条命令加一张对照表

验证不是敲个iostat看到输出就算完,要确认“实时能看、历史能查、定时在采”三件事都成立。我一般按下面顺序走一遍,十分钟内能定位绝大多数问题。

# 第一条:实时视图,确认 iostat 扩展字段齐全 /usr/local/bin/iostat -x 1 3 # 第二条:历史视图,确认昨天的数据能回看 /usr/local/bin/sar -u -f /var/log/sa/sa$(date -d yesterday +%d) # 第三条:采集状态,确认定时任务真的在写 ls -l --time-style=+%H:%M /var/log/sa/ | tail -3

第一条看iostat -x输出里有没有r_await、w_await、aqu-sz三列,有就说明 11.5.6 的扩展统计生效;第二条能出 CPU 曲线说明历史文件可读;第三条看saDD文件的修改时间是否在最近十分钟内,是则定时采集正常。

下面这张对照表是我排错时常用的判断依据,把现象和落点对上,少走弯路。

验证项正常表现异常时先查
iostat -V显示 11.5.6PATH顺序、旧包是否卸载
iostat -x含 await、aqu-sz 列内核/proc/diskstats是否可读
sar -u -f输出历史 CPU 数据saDD文件是否存在、日期是否对
sar -d -f输出磁盘数据SADC_OPTIONS是否含-S DISK
ls /var/log/sa文件时间在 10 分钟内cron 路径、timer 状态、目录权限

有个细节值得单独说:sar的-f参数后面跟的文件名,日期是“采集日”而不是“查看日”,跨月时sa01可能属于上个月,date +%d直接拼容易看错文件。我习惯先用ls /var/log/sa/看清实际文件名再指定,不靠日期推算。

还有一点,源码装的 sysstat 不会自动进logrotate,/var/log/sa/的清理全靠HISTORY和sa2的压缩逻辑。如果发现目录越来越大,先查HISTORY是不是被改成了很大的值,再看COMPRESSAFTER是否生效,别急着写额外的清理脚本,容易和 sysstat 自己的轮转打架。

从那以后我每次装完 sysstat,都强制走一遍“实时、历史、定时”这三条验证,哪怕机器再急用也不跳过——因为跳过的那次,往往就是三天后要查故障却发现没数据的那次。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询