☰
CentOS离线安装stress的两种方法及避坑指南
2026/9/25 5:04:30 网站建设 项目流程

简介:针对 CentOS 环境未联网服务器的一次性压力测试工具离线交付包,面向系统运维、应用性能测试等场景。资源内置 stress-1.0.4 主程序源码包及编译安装辅助文件,同时打包 gcc-g++-4.8.5 等 11 个 rpm 依赖包,解决离线状态下 gcc、make 等基础工具缺失导致无法安装的典型问题;并附带 sar 命令相关组件,便于压测过程中同步采集 CPU、内存等系统性能指标,形成较为完整的性能基线数据。资源共 43 个文件,除 rpm 依赖包外,还有 configure、Makefile 模板、C 源码、info 说明文档、shell 辅助脚本等,包体约 46.66MB,目录结构涵盖编译、安装、验证所需的完整环节。当前已有 2582 人学习下载。读者可据此在完全内网环境完成 stress 工具部署、自定义压力参数测试,并结合 sar 收集负载日志,适合需要掌握 Linux 压测环境搭建与离线部署思路的运维人员。

1. 离线安装 stress 之前,先想清楚你装的到底是什么

在 CentOS 服务器上做压力测试,stress 是最常用的工具之一,它能模拟 CPU、内存、IO 和磁盘负载,帮你快速验证系统稳定性、散热、供电和内核调度。但现实场景里,生产网段往往和外网隔离,yum install stress 这条命令根本敲不通。于是「linux centos stress离线安装」成了运维和测试工程师的常见搜索词,问题本质上不是 stress 本身有多难装,而是离线下怎么把依赖包凑齐、怎么解决架构不一致、怎么验证装完的二进制真的能跑。

我自己的经验是,离线装 stress 有两条稳妥路线:一是找一台相同系统版本的联网机器把 rpm 包和依赖全部拉下来拷过去;二是直接把 CentOS 安装镜像挂载为本地 yum 源,从光盘仓库里装。这篇笔记把两条路线都展开,包含命令、参数、依赖陷阱和压测验证方法,新手能照着做完,熟手也能看到版本和架构边界。

2. 离线安装 stress 的两种路线:本地源与下载依赖包

2.1 离线安装的核心思路:先在联网机器上拉齐依赖

stress 这个工具本身非常轻,它只有一个可执行文件和对应的 man 文档,不依赖 ncurses、libaio 这类重库。但 rpm 包安装时仍有依赖检查,如果在离线机器上直接 rpm -ivh stress-1.0.4-16.el7.x86_64.rpm,大概率会遇到依赖缺失的报错,常见提示是libc.so.6()(64bit)未满足。libc 是系统最底层的库,你不可能为了装 stress 去升级 libc,那会破坏整个系统。所以离线安装的正确思路是:用 yum 的下载模式把 stress 和它声明的依赖全部拉成一个本地目录,再整体搬运到目标机器上安装。

我一般会先查 stress 在 CentOS 7 下的确切包名和版本:

# 在能联网且系统版本一致的机器上执行 yum list stress --showduplicates # 输出会显示类似 stress-1.0.4-16.el7.x86_64 的完整包名 # --showduplicates 会列出所有可用版本,方便选一个和离线机器匹配的版本

这里的关键是「系统版本一致」。CentOS 7 的 rpm 包不能装到 CentOS 8 上,因为 glibc 版本和 ELF 格式虽兼容,但软件包编译时链接的库版本不同,装上去运行时会报version 'GLIBC_2.28' not found之类的问题。所以第一步先确认离线机器的cat /etc/redhat-release,再决定在哪台联网机器上下包。

2.2 方法一:用 yumdownloader 拉取 stress 及全部依赖

yumdownloader 是 yum-utils 包自带的工具,目标是只下载 rpm 文件而不安装。它支持--resolve参数,能把依赖一并拉下来,这是离线安装最省事的一招。连续按以下命令操作:

# 1. 安装 yum-utils(如果还没有的话) yum install -y yum-utils # 2. 创建目录,专门存放下载的 rpm 包 mkdir -p /data/stress-rpms && cd /data/stress-rpms # 3. 下载 stress 和全部依赖 yumdownloader --resolve --destdir=/data/stress-rpms stress # 4. 看看拉下来几个包 ls -lh /data/stress-rpms/

--resolve会把 stress 依赖的库也拉下来,比如 glibc、libgcc 这些虽然系统里已经有了,但 yumdownloader 还是会按依赖链下载。实际拉下来通常有 10 多个 rpm 文件,这是因为 stress 依赖 glibc,glibc 又依赖一堆基础库。把这整个目录拷贝到离线机器后,用rpm -Uvh *.rpm或者yum localinstall安装都能过依赖检查。

有个细节值得注意:如果离线机器和联网机器的 CentOS 小版本不同,比如一个是 7.6 一个是 7.9,拉下来的 glibc 版本会比你系统里的旧或者新。此时直接装 stress 本身没问题,但不要把拉下来的所有 rpm 全部强制安装,只需要挑出 stress 和 system-release 相关之外的那几个关键库就行。更安全的做法是用rpm -qip逐个查看依赖关系再决定装哪些。

2.3 方法二:挂载 CentOS 镜像作为本地源

如果公司内网本来就有 CentOS 7.9 的 iso 镜像,或者你手边有光盘,那可以不用下载任何 rpm。直接把 iso 挂载到目录,配置成本地 yum 源后,离线机器上跑yum install stress就会从本地源安装,不再访问外网。这个方式的好处是依赖问题完全交给 yum 解决,坏处是镜像里的软件包集合比在线源旧,而且镜像体积通常 4GB 以上,传输到离线机器需要花点时间。

# 1. 创建挂载目录 mkdir -p /mnt/cdrom # 2. 挂载 iso(如果是光盘,设备名通常是 /dev/cdrom) mount -o loop /data/CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom # 3. 备份原有 yum 源配置 mkdir -p /etc/yum.repos.d/backup mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ # 4. 写一个指向本地挂载目录的 repo 文件 cat > /etc/yum.repos.d/local.repo << 'EOF' [local-base] name=Local CentOS DVD baseurl=file:///mnt/cdrom enabled=1 gpgcheck=0 EOF # 5. 刷新缓存并直接安装 yum clean all yum makecache yum install -y stress

用镜像源时 gpgcheck 建议设置为 0,因为光盘自带的 GPG key 导入又是一个坑。另外挂载方式需要用loop选项,不写的话mount会报 "wrong fs type" 之类的错误。如果目标是 arm 架构的 CentOS,那 iso 也要对应 aarch64 版本,这点后面会再展开讲。

2.4 两种方法的取舍:什么时候用哪个

我的判断标准很简单:如果离线机器数量少于 10 台,用 yumdownloader 拉 rpm 包拷贝是最快的,整个目录也就几 MB 到几十 MB,拷起来方便。如果机器多,或者是长期离线环境,那直接挂载 iso 做本地源更划算,以后装别的软件也能用同一个源。还有第三种场景是目标机器有其他 yum 源可以走内网 HTTP 访问,那直接把 repo 指向内网镜像源就行,严格说这不算离线,但做法和挂载 iso 一样。

3. 实操:在 CentOS 7 上完整跑通离线安装 stress

3.1 从联网机器到离线机器:完整的搬运与安装命令

这一节我们走一条完整的路径,从联网机器下载、打包、传到离线机器、安装、验证。假设你是用 U 盘或者 scp 传递文件,以下命令在联网机器上执行:

# 在联网机器上(系统版本必须与离线机相同或相近) yum install -y yum-utils mkdir -p /data/stress-rpms cd /data/stress-rpms # 下载 stress 及其全部依赖到当前目录 yumdownloader --resolve --destdir=/data/stress-rpms stress # 打包,方便一次性拷走 tar czf stress-rpms.tar.gz *.rpm

打包时有两点要注意:一是不要带绝对路径,不然解包会散到根目录;二是 tar 的czf参数不要漏,c创建、z压缩、f指定文件名。拷到离线机器上以后,先不要急着一股脑安装,先解压看看到底有哪些包:

tar xzf stress-rpms.tar.gz ls -lah *.rpm rpm -qip stress-*.rpm

rpm -qip(i 是 info,p 是 package 文件)会把 stress 的版本、架构、依赖信息显示出来。重点看Architecture字段是不是 x86_64,如果离线机器是 aarch64 或者 i686,那包是装不上去的,rpm 会直接提示架构不符合。

3.2 安装命令的选择:rpm -ivh 与 yum localinstall 的区别

离线机器上安装这一步有两条命令可用,各有适用场景:

# 方式一:rpm 直接安装(推荐只装 stress 主包) rpm -ivh stress-1.0.4-16.el7.x86_64.rpm # 方式二:yum 本地安装(自动处理依赖,但需要把所有依赖 rpm 都放到同一目录) yum localinstall -y /data/stress-rpms/*.rpm

如果下载时用了--resolve,依赖包都在同一个目录里,yum localinstall -y *.rpm会一次性把依赖全部装好,这是最不容易出错的方式。但注意yum localinstall在 CentOS 8 之后已经改名为yum install,CentOS 7 上两个都能用。rpm -ivh的优点是快,缺点是如果依赖没齐,会报Failed dependencies列出缺失的库名,你需要手动逐个补齐,对新手不友好。

我自己的习惯是:如果只是想装 stress 一个工具,直接rpm -ivh装主包,报依赖了再回头装对应依赖;如果是要在集群里批量发,那用yum localinstall更省事,一条命令把目录里所有包装上。

3.3 验证安装结果:不止看命令是否存在

安装完成后还要验证一下能不能真的用,这一步很多人会忽略:

# 1. 查看 stress 命令路径和版本 which stress stress --version # 2. 查看 rpm 包是否正确安装 rpm -qa | grep stress # 3. 跑一个最简单的 CPU 压力测试,5 秒后退出 stress --cpu 1 --timeout 5s

stress --version在 CentOS 7 上会输出类似stress 1.0.4的信息。注意老版本 stress 的--timeout参数支持s、m、h后缀,也可以直接写数字表示秒。跑完--cpu 1 --timeout 5s后,用echo $?看返回值,如果是 0 说明正常退出,非 0 说明压测过程中发生了异常。这一步不是为了压测,而是验证二进制文件在目标系统上能正常调度 CPU。

3.4 本地源配置的升级玩法:把 rpm 目录变成 yum 源

前面提到过挂载 iso 做本地源,其实下载下来的 rpm 目录也可以变成 yum 源,用createrepo工具生成元数据。这样后续再装其他工具的依赖,也能从这个本地源里解析。做法不复杂:

# 在离线机器上先安装 createrepo(如果系统自带就跳过) rpm -ivh createrepo-*.rpm # 对 rpm 目录生成仓库元数据 createrepo /data/stress-rpms/ # 写 repo 文件指向这个目录 cat > /etc/yum.repos.d/local-rpms.repo << 'EOF' [local-rpms] name=Local Stress RPMs baseurl=file:///data/stress-rpms enabled=1 gpgcheck=0 EOF

这样做的好处是以后yum install其他包时,yum 会把这个本地目录也当成一个源,依赖解析范围更大。但要注意,这个源里只有 stress 及其依赖,装别的软件时如果依赖不在这个目录,yum 还是会提示找不到。所以本质上这是在离线环境下自己维护一个小型软件仓库,适合后续持续往目录里丢 rpm 包的场景。

4. 离线安装 stress 的避坑记录:版本、架构与依赖冲突

4.1 现象:yum install stress 提示 "No package stress available"

离线机器上直接跑yum install stress往往报这行,原因很简单,CentOS 默认的 Base 源里并没有 stress 这个包,它通常在 EPEL(Extra Packages for Enterprise Linux)源里。所以就算你联网,直接 yum 装也可能失败。解决的办法是提前把 EPEL 的 rpm 包也下载下来,或者配置好 epel 的本地源再装。

具体做法是先在联网机器上拉 epel-release 和 stress 的 rpm 一起拷贝,或者用yumdownloader --enablerepo=epel stress指定源下载。如果离线机器已经有 epel 源配置但没法访问外网,那只要源配置是对的,yum install stress还是能找到包,只是网络不通会卡在请求元数据阶段。这种情况下把元数据缓存好再离线安装,也可以走通。

4.2 现象:rpm 安装时报 "Failed dependencies: libc.so.6()(64bit) is needed"

这个报错最容易让人慌,因为它看起来像系统缺了核心库。其实 libc.so.6 是 glibc 提供的,你的系统里必然有,rpm 报依赖不满足是它没有在系统 RPM 数据库中登记这个库的版本信息。这种情况最常见的原因是 rpm 包是从不同版本的 CentOS(比如 CentOS 8)上拉下来的,导致依赖版本比系统高。

解决方法是确认包版本与系统匹配,CentOS 7 用stress-1.0.4-16.el7.x86_64.rpm,不要去拿 el8 的包。如果确认包没拿错,还有一种可能是系统里 glibc 被手动替换过,rpm 数据库里记录的信息和实际文件不一致。此时用rpm -V glibc验证一下,如果不一致,说明系统本身被改过,先修复系统再装 stress 是更稳妥的做法。

4.3 现象:yum localinstall 时提示 "Protected multilib versions"

CentOS 7 的 64 位系统上安装 32 位 rpm 包时经常会遇到这个提示,原因是系统启用了 multilib 保护。stress 本身是 x86_64 的包,一般不会触发,但如果你下载依赖时把 i686 的包也混进来了,yum 就可能会因为保护机制拒绝安装。

解决方法是把目录里的 i686 包清理掉,只保留 x86_64 的 rpm。如果确实需要装 32 位兼容库,可以在 yum 命令后面加--setopt=multilib_policy=all,但装 stress 不需要这么做。我自己遇到过一次是 yumdownloader 把 glibc 的 i686 版也拉下来了,当时没注意,localinstall 时直接报错,删掉 i686 包后重跑就好了。

4.4 现象:装完 stress 报 "stress: error while loading shared libraries: libc.so.6"

这个和 4.2 不一样,它是运行时错误,说明 stress 二进制文件在加载 libc 时失败了。常见原因是动态链接器缓存没有刷新,用ldconfig命令刷新一下即可。另外也有可能是 stress 包版本对应当前系统的 glibc 版本过高,比如把 CentOS 7 的 stress 装到了 CentOS 6 上,glibc 版本不满足运行要求。

排查时先看/lib64/libc.so.6这个符号链接是否存在,然后ldd /usr/bin/stress查看实际加载情况。如果 ldd 输出显示 libc.so.6 找不到,多半是链接器缓存问题,执行ldconfig -v刷新后重新跑。如果是版本问题,ldd 会提示GLIBC_2.xx not found,那就必须换更低版本的包。

4.5 现象:CentOS 8/9 上用 CentOS 7 的 rpm 包报错

这个坑很隐蔽,因为 CentOS 8 和 CentOS 7 的 rpm 包格式都是 RPM v3,rpm 工具本身不会拒绝安装。但装上以后,运行时会因为 glibc 版本不兼容直接报错。CentOS 8 的 glibc 是 2.28,CentOS 7 是 2.17,stress 如果是在 CentOS 7 上编译的,在 CentOS 8 上可能没问题,反过来就不行。

更稳妥的做法是装之前查一下系统版本和包版本,用cat /etc/redhat-release看小版本号,用rpm -qpi看包编译平台。如果是 CentOS Stream 或者 Rocky Linux 这些衍生系统,尽量找对应的 el 标签(el8、el9),不要混用。

5. 装好 stress 之后怎么用:压测命令、参数边界与验证习惯

5.1 stress 的最小压测命令:CPU、内存与磁盘

stress 装好以后,最重要的是别乱用参数。很多人一上来就stress --cpu 8,结果把服务器压到无响应,最后只能强制重启。正确的做法是从小到大试探,先单核跑 30 秒,观察系统负载和温度,再逐步增加。以下是我常用的几个场景命令:

# 场景一:CPU 压力测试,使用 4 个 worker,运行 60 秒 stress --cpu 4 --timeout 60s # 场景二:内存压力测试,分配 512MB 内存并持续读写,运行 120 秒 stress --vm 1 --vm-bytes 512M --vm-hang 5 --timeout 120s # 场景三:磁盘 IO 压力测试,创建 1GB 临时文件,持续写入 stress --io 4 --hdd 1 --hdd-bytes 1G --timeout 60s

--vm-hang这个参数值得解释,它表示内存分配完后进程挂起的时间(秒),默认是无限挂起,如果不加 timeout 进程不会退出。--hdd-bytes 1G表示每次写入 1GB 数据,会反复写直到 timeout。注意 stress 不会自动清理临时文件,--hdd产生的临时文件分布在当前目录,用完记得手动删除。

5.2 看压测结果不能只看 stress 输出:配合系统工具验证

stress 的输出很简洁,就是告诉你 fork 了多少进程、每个进程在做什么。真正要评估系统稳定性,得同时看 top、vmstat 和 dmesg。判断压测是否有效的标准不是 stress 本身退出码 0,而是系统在压测期间有没有产生硬件错误、内核报错或者进程被杀。

# 另开一个终端,实时观察 CPU 负载和内存使用 top -d 1 # 看内存和 swap 变化 vmstat 1 10 # 压测结束后看内核日志里有没有硬件错误 dmesg | tail -n 30

压测时出现大量soft lockup警告说明 CPU 资源分配异常,出现Out of memory说明内存配置有问题,出现thermal throttling说明散热不行。这些才是压测真正要发现的问题。我自己遇到过一台旧服务器,stress 单核跑 5 分钟就触发内核 panic,最后查出来是 CPU 供电模块老化。

5.3 离线环境下重复使用的习惯:保存 rpm 包目录

离线安装一次不代表以后不再装,尤其是要给一批机器批量部署的时候。我习惯在所有机器上把/data/stress-rpms这个目录保留下来,不删。下次装新机器只需要把目录整体拷过去,yum localinstall一条命令完事,不需要再回到联网机器上重新下载。

保存目录的时候顺带写一个 README 文件,记录基于哪个 CentOS 小版本下载的包:

cat > /data/stress-rpms/README << 'EOF' stress rpm packages for CentOS 7.9 x86_64 Downloaded from EPEL on 2024-11-20 Install: yum localinstall -y /data/stress-rpms/*.rpm EOF

这个文件不花心思,但能帮未来的自己省掉「这个包从哪来的」这种排查时间。尤其是过几个月再回来维护的时候,版本和来源信息比命令本身更值钱。我希望这套离线安装 stress 的流程能帮到你,至少能让你在断网环境里把压测工具顺利跑起来,而不是卡在安装这一步。

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

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

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

立即咨询