资讯动态

CentOS 7/8 离线安装 stress 压测工具:依赖解决与避坑指南

发布时间:2026/10/17 13:58:35 来源:尧图企业网站定制
简介本资源面向需要在无外网环境下开展Linux性能压测的运维与后端人员提供CentOS平台stress工具的离线安装方案解决内网服务器无法通过yum在线获取压测组件的问题。压缩包共43个文件约46.66MB以rpm依赖包为主同时包含configure、install-sh等构建脚本以及readme、changelog、news等说明文档和源码相关文件兼顾直接安装与源码编译两种使用方式。资源描述中提及附带sar命令便于在压测过程中同步采集系统性能数据形成压力施加与指标观测的完整链路。目前已有2589人学习下载适合具备一定Linux基础、需要验证服务器CPU、内存、IO等负载能力的工程师参考使用可帮助快速完成离线部署并开展稳定性与容量测试。1. 离线环境装 stress为什么你下的包总是缺依赖机房内网一台 CentOS 7.9 要压测外网连不上yum 源全是内网镜像yum install stress直接报找不到包。这种场景我遇到过不止一次——不是 stress 本身难装是离线环境里依赖链断了一环你根本不知道断在哪。stress 是个极简的 Linux 压力测试工具就一个二进制加一个 man page但它依赖 libgomp、libstdc 这些基础库CentOS 最小化安装时不一定齐全。很多人从某台能上网的机器上yumdownloader stress拷过来rpm -ivh一执行就报Failed dependencies然后开始一个个手动找 so 文件越找越乱。这篇笔记面向的是需要在无外网 CentOS 上完成 stress 离线安装的运维和开发从版本选择、依赖梳理、rpm 安装到编译兜底把每一步的命令和参数都写清楚照着走能跑通装坏了也知道怎么回退。2. 装之前先定版本CentOS 7/8 该选哪个 stress 包2.1 确认系统版本和架构离线安装最怕拿错包。CentOS 7 和 CentOS 8 的 glibc 版本不同stress 的 rpm 包不能混用。先确认目标机器的系统版本和 CPU 架构# 查看系统发行版和版本号 cat /etc/centos-release # 查看内核版本辅助判断兼容性 uname -r # 查看 CPU 架构决定下载 x86_64 还是 aarch64 的包 uname -m/etc/centos-release输出类似CentOS Linux release 7.9.2009 (Core)这就是你选包的依据。uname -m输出x86_64就下 x86_64 的 rpm输出aarch64就得找 ARM 架构的包。我一般会在能上网的机器上执行同样的命令确保两边架构一致再下载。如果目标机器是 CentOS 8/etc/centos-release会显示CentOS Linux release 8.x这时候用 CentOS 7 的 rpm 大概率会因为 glibc 版本不匹配而失败。2.2 stress 版本选择和获取方式stress 的版本更新很慢1.0.4 是流传最广的稳定版1.0.7 修了一些信号处理的边界问题。CentOS 7 的 EPEL 源里长期提供的是 1.0.4-16.el7 这个版本CentOS 8 的 EPEL 里是 1.0.4-24.el8。离线环境下你有两条路一是直接拿对应版本的 rpm 包二是拿源码包自己编译。rpm 包省事但依赖必须齐源码编译灵活但需要 gcc 和 make。我一般优先找 rpm因为 stress 的依赖不多凑齐的概率大。获取 rpm 的常见做法是在一台同版本 CentOS 上执行# 安装 yum-utils 以获得 yumdownloader 工具 yum install -y yum-utils # 下载 stress 的 rpm 包到当前目录不安装 yumdownloader stress # 同时下载它的所有依赖包--resolve 会自动解析依赖树 yumdownloader --resolve stressyumdownloader会把 stress 及其依赖的 rpm 全部下到当前目录。--resolve是关键参数不加它只会下 stress 一个包依赖还得自己找。下载完成后你会看到类似stress-1.0.4-16.el7.x86_64.rpm和libgomp-4.8.5-44.el7.x86_64.rpm这样的文件。把这些 rpm 全部拷到目标机器的同一个目录下后面统一安装。提示如果目标机器是 CentOS 8把上面的命令在 CentOS 8 环境里执行不要用 CentOS 7 的包替代。2.3 依赖清单和版本对照stress 在 CentOS 7 上的直接依赖通常只有两个libgomp和libstdc。但libstdc又依赖glibcglibc的版本是系统自带的一般不用动。下面这张表是我在 CentOS 7.9 最小化安装环境里实测的依赖对照包名CentOS 7 典型版本是否必须说明stress1.0.4-16.el7是主程序libgomp4.8.5-44.el7是OpenMP 运行时库libstdc4.8.5-44.el7是C 标准库glibc2.17-317.el7系统自带一般无需单独安装在目标机器上用rpm -q检查这些包是否已存在# 逐个检查依赖包是否已安装 rpm -q libgomp libstdc glibc # 如果输出 package xxx is not installed 就需要补装如果libgomp和libstdc都已经在系统里那你只需要拷 stress 一个 rpm 过去就行。最小化安装的 CentOS 7 通常缺libgomplibstdc一般都有。这一步先查清楚能少拷很多不必要的包。3. 离线安装实操rpm 和源码编译两条路3.1 用 rpm 安装 stress 及依赖把所有 rpm 包放到目标机器的/tmp/stress-offline/目录下然后一次性安装。我习惯用rpm -ivh而不是yum localinstall因为离线环境下 yum 可能因为源配置问题卡住rpm 更直接# 进入存放 rpm 包的目录 cd /tmp/stress-offline/ # 一次性安装目录下所有 rpm--nodeps 不要加让 rpm 自己检查依赖 rpm -ivh *.rpm-i是安装-v显示详细信息-h显示进度条。如果依赖齐全你会看到每个包依次安装成功。如果报Failed dependencies说明还有包没拷全根据报错信息里的包名回到能上网的机器上继续yumdownloader下载。注意不要加--nodeps强行安装那样即使装上了 stress 也跑不起来运行时会报error while loading shared libraries。安装完成后验证# 查看 stress 是否安装成功 rpm -q stress # 查看 stress 版本 stress --versionrpm -q stress输出stress-1.0.4-16.el7.x86_64就说明装上了。stress --version输出stress 1.0.4说明二进制能正常执行。3.2 源码编译作为兜底方案如果 rpm 依赖实在凑不齐或者目标机器是 CentOS 8 而手头只有 CentOS 7 的包源码编译是更稳的路。需要目标机器上有 gcc 和 make离线环境下这两个工具如果也没有就得先补装gcc、make、glibc-devel这几个 rpm。源码包从 stress 的官方发布页获取通常是一个stress-1.0.4.tar.gz文件。拷到目标机器后# 解压源码包 tar -zxvf stress-1.0.4.tar.gz # 进入解压后的目录 cd stress-1.0.4/ # 配置编译选项--prefix 指定安装路径 ./configure --prefix/usr/local/stress # 编译-j4 表示用 4 个核并行编译加快速度 make -j4 # 安装到指定路径 make install--prefix/usr/local/stress把 stress 装到独立目录不污染系统路径卸载时直接删目录就行。make -j4的-j参数根据目标机器的 CPU 核数调整核多就写大一点。编译过程中如果报gcc: command not found说明 gcc 没装需要先补装 gcc 的 rpm 包。如果报configure: error: C compiler cannot create executables通常是glibc-devel缺失。编译安装后需要把/usr/local/stress/bin加到 PATH 里# 临时生效当前终端可用 export PATH$PATH:/usr/local/stress/bin # 永久生效写入 profile echo export PATH$PATH:/usr/local/stress/bin /etc/profile source /etc/profileexport PATH只对当前会话有效写入/etc/profile后对所有用户永久生效。source /etc/profile让修改立即生效不用重新登录。3.3 安装后的目录结构和文件确认rpm 安装和源码编译安装的文件分布不同确认一下关键文件在哪# rpm 安装的查询文件列表 rpm -ql stress # 源码编译的查看安装目录 ls -la /usr/local/stress/bin/rpm 安装的 stress 二进制在/usr/bin/stressman page 在/usr/share/man/man1/stress.1.gz。源码编译的二进制在/usr/local/stress/bin/stress。确认二进制存在且可执行后面压测才能正常调用。4. 避坑排查离线装 stress 最容易翻车的五个点4.1 报错 Failed dependencies 但不知道缺哪个包现象是rpm -ivh stress-1.0.4-16.el7.x86_64.rpm输出Failed dependencies: libgomp.so.1()(64bit) is needed by stress-...。原因是目标机器没装libgomp。解决方法是回到能上网的机器执行yumdownloader --resolve stress把libgomp的 rpm 一起拷过来。如果yumdownloader也解析不出来直接用rpm -q --whatprovides libgomp.so.1()(64bit)在能上网的机器上查是哪个包提供的然后单独下载那个包。4.2 装完后执行 stress 报 cannot open shared object file现象是stress --version输出stress: error while loading shared libraries: libgomp.so.1: cannot open shared object file: No such file or directory。原因是 rpm 安装时用了--nodeps强行跳过依赖检查或者libgomp装了但路径不对。解决方法是先rpm -q libgomp确认包在不在不在就补装在的话用ldconfig刷新动态链接库缓存# 刷新动态链接库缓存 ldconfig # 再次验证 stress --versionldconfig会重新扫描/etc/ld.so.conf里配置的库路径把新装的库纳入缓存。如果还不行用ldd $(which stress)查看 stress 依赖的每个 so 文件的实际路径缺哪个补哪个。4.3 CentOS 8 上装了 CentOS 7 的包导致 glibc 版本冲突现象是rpm -ivh报libc.so.6(GLIBC_2.28)(64bit) is needed之类的错误。原因是 CentOS 8 的 glibc 是 2.28CentOS 7 的包编译时依赖的是 2.17版本对不上。解决方法是不要在 CentOS 8 上装 CentOS 7 的 rpm要么找 CentOS 8 的 EPEL 包要么直接源码编译。源码编译时用的是目标机器自己的 glibc不存在版本冲突。4.4 源码编译时 make 报错找不到 gcc现象是./configure或make阶段报gcc: command not found或make: command not found。原因是目标机器最小化安装没装编译工具链。解决方法是先离线补装gcc、make、glibc-devel、kernel-headers这几个 rpm。在能上网的机器上执行# 下载编译工具链的 rpm 及依赖 yumdownloader --resolve gcc make glibc-devel kernel-headers把这些包拷到目标机器安装后再重新编译 stress。4.5 安装后 PATH 没生效直接敲 stress 提示 command not found现象是源码编译安装到/usr/local/stress/bin后直接敲stress提示找不到命令。原因是/usr/local/stress/bin不在 PATH 里。解决方法是按 3.2 节的方法把路径写入/etc/profile并source生效。如果不想改 profile也可以创建软链接# 创建软链接到 /usr/local/bin该目录默认在 PATH 里 ln -s /usr/local/stress/bin/stress /usr/local/bin/stressln -s创建符号链接/usr/local/bin默认在 PATH 中这样不用改环境变量也能直接调用。5. 装完怎么验证三条命令确认 stress 真能跑起来装完不验证等于没装。我一般用三条命令逐层确认先看版本再跑一个短时压测最后检查系统负载是否真的上去了。第一条确认二进制可执行# 查看版本能输出版本号说明二进制和依赖都没问题 stress --version第二条跑一个 10 秒的 CPU 压测开 2 个 worker# -c 2 表示启动 2 个 CPU 压力进程-t 10 表示持续 10 秒 stress -c 2 -t 10-c 2是 CPU 压力进程数-t 10是超时时间单位秒。执行后你会看到 stress 输出stress: info: [pid] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd然后等 10 秒自动退出。如果这 10 秒内没有报错说明 stress 能正常调度 CPU 压力。第三条在另一个终端用top或uptime观察负载# 查看 1 分钟、5 分钟、15 分钟的平均负载 uptime # 或者用 top 看 CPU 使用率 top -bn1 | head -5uptime输出的load average三个值分别对应 1、5、15 分钟的平均负载。跑stress -c 2时如果机器是 2 核load average 应该接近 2.0。top -bn1的-b是批处理模式-n1是只刷新一次适合脚本里抓取。如果 load 没变化说明 stress 没真正跑起来回到第 4 章排查。内存压测也顺手验一下# -m 1 表示启动 1 个内存压力进程--vm-bytes 256M 表示每个进程分配 256MB stress -m 1 --vm-bytes 256M -t 10-m 1是内存压力进程数--vm-bytes 256M是每个进程分配的内存大小。跑的时候用free -m看内存变化确认 stress 确实在吃内存。从那以后我每次离线装完 stress都强制走一遍「版本 → CPU 压测 → 内存压测 → load 确认」这四步不看到 load average 真的上去不算完。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑