内网环境离线安装stress的完整指南:依赖处理与实操步骤
2026/9/9 1:35:17 网站建设 项目流程

简介:面向CentOS/Linux运维与性能测试工程师,这份离线安装包专门解决无外网或内网隔离环境下压力测试工具stress的部署难题,同时覆盖性能监控命令sar,适合用于服务器稳定性验证、容量规划与故障排查场景。资源共43个文件,以rpm安装包、源码文件与辅助文档为主,其中gcc-g++-4.8.5的rpm包可解决离线编译时的依赖问题,自动化配置脚本、构建规则文件与说明文档分别承担环境检测、编译过程与使用指导等职责,用户可根据需要选取二进制安装或源码编译两种路径。压缩包整体约46.66MB,目录结构清晰,便于按需取用。目前已有2573人学习下载,被多次用于生产环境前的压力测试准备。借助该包,用户无需联网即可完成stress安装,并能配合sar监控CPU、内存、I/O等关键指标,形成从压测工具到性能分析的一体化方案。 很多人第一次在 CentOS 上装 stress 的时候,下意识就是yum install stress,但如果服务器是内网隔离环境,或者出于安全要求不能直连外网,这招直接就废了。更要命的是,有些机器连 epel-release 都没装,连下载源都找不到。我前前后后在内网环境折腾过很多次,这里把离线安装 stress 的完整思路和实操步骤整理出来,希望能帮你少踩几个坑。

1. 离线安装的核心思路:依赖才是最大的坑

先说结论:stress 本身的安装包非常小,问题从来不在 stress 这个包上,而在它的依赖。

1.1 为什么不能直接拷一个二进制文件过去

有人觉得,既然 stress 是 C 语言写的,那我把编译好的二进制直接拷到目标机器上不就行了?理论上可以,但有个前提:目标机器的 glibc 版本必须和编译环境的 glibc 版本兼容。CentOS 7 和 CentOS 8 的 glibc 版本不一样,你在 CentOS 8 上编译的 stress,拷到 CentOS 7 上经常会报version 'GLIBC_2.28' not found之类的错误。这种问题排查起来很头疼,因为根本看不出来是哪里不对。

所以离线安装的正道是:用 rpm 包解决,而不是拷贝二进制。

1.2 stress 到底依赖哪些库

在 CentOS 7 上,stress 的依赖主要有:

  • libc.so.6 (glibc)
  • libm.so.6 (glibc)
  • libcrypt.so.1 (libcrypt)

CentOS 8 上略有不同,但整体来说依赖不算复杂。真正的复杂度在于,yum install的时候 YUM 会自动帮你解析依赖,而离线安装时你得手动保证这些依赖都在。

1.3 离线安装的三种主流方案对比

方案优点缺点适用场景
方案A:联网机器下载 rpm 包,离线机器 rpm -ivh 安装操作简单直接依赖需要手动处理内网机器数量少,依赖简单
方案B:离线机器配本地 yum 源依赖自动解析,体验接近在线安装需要提前准备仓库数据内网机器数量多,后续还要装其他软件
方案C:源码编译安装完全不依赖 rpm,可自定义编译参数需要编译环境,时间长架构特殊,或者需要特定版本

我在实际工作中,方案A用得最多,因为临时跑个压测工具,没必要搞一套 yum 源。但如果内网环境是个大集群,我建议一步到位做本地 yum 源。

2. 准备离线安装包:两种做法,按场景选

2.1 做法一:在联网的 CentOS 机器上下载 rpm 包

如果你的工作电脑或者跳板机是 CentOS,并且能联网,那直接在联网机器上下载 rpm 包是最省事的。

# 先在联网机器上安装 epel 源(如果还没装的话) yum install -y epel-release # 下载 stress 及其全部依赖到指定目录 mkdir -p /root/stress-rpms yum install --downloadonly --downloaddir=/root/stress-rpms stress

执行完yum install --downloadonly之后,检查一下:

ls -l /root/stress-rpms/

正常情况下你应该看到类似这样的文件:

  • stress-1.0.4-16.el7.x86_64.rpm
  • libcrypt-xxx.rpm(如果依赖需要)

这个--downloadonly参数是关键,它在 CentOS 7 和 CentOS 8 上都可用。如果提示找不到这个参数,说明你得先安装yum-plugin-downloadonly

yum install -y yum-plugin-downloadonly

CentOS 8 上默认支持,不需要额外装插件。

2.2 做法二:直接从网上下载 rpm 包

如果你手头没有联网的 CentOS 机器,只有一台普通电脑,那也可以直接从浏览器下载 rpm 包。

需要下载两个东西:

  • stress 本体
  • stress 的依赖

stress 的 rpm 包在 EPEL 仓库里,可以直接访问 EPEL 的 mirror 列表,或者用 pkgs.org 之类的网站搜索。需要注意匹配系统版本,CentOS 7 就下载 el7 的包,CentOS 8 就下 el8 的。

依赖方面,因为 GLIBC 这类基础库系统里本来就有,你要额外确认的是libcrypt.so.1在不在。多数情况下系统自带,但有些精简安装的 CentOS 里可能缺这个。保险起见,可以在下载 stress 的同时把常用依赖一并拉下来备用。

2.3 版本选择的实操建议

我的经验是:别追最新版本,用 EPEL 仓库里的默认版本就足够了。stress 这个工具十年如一日地稳定,版本 1.0.4 出来很久了,功能完全够用。如果你在别的机器上看到 1.0.5,那也只是打包的小版本变化,不影响使用。

另外提醒一句:下载 rpm 包的时候,注意区分 el7 和 el8。把 el8 的包硬装到 el7 上,依赖关系会直接爆炸。

3. 目标机器上离线安装:从拷包到验证的完整流程

3.1 把 rpm 包拷贝到目标机器

U盘拷贝或者 scp 都行。这一步我踩过一次坑:直接把整个文件夹压缩成一个 tar 包再拷过去,然后解压安装,比一个个拷文件稳定得多。

# 在联网机器上打包 tar czf stress-rpms.tar.gz /root/stress-rpms/ # 拷贝到目标机器后解压 tar xzf stress-rpms.tar.gz -C /root/

3.2 安装 rpm 包的几种方式

拷过去之后,安装方式有三种,按推荐优先级排列:

方式一:rpm -Uvh 批量安装

cd /root/stress-rpms/ rpm -Uvh *.rpm

这个命令会把当前目录下所有 rpm 包一起装掉。用-U(升级安装)而不是-i(全新安装)的好处是,就算系统里已经有旧版本的库,也能平滑升级上去。

方式二:逐个安装

如果批量安装报错,就一个个来,先装依赖再装 stress:

rpm -ivh libcrypt-xxx.rpm rpm -ivh stress-*.rpm

方式三:本地 yum 源安装

如果 rpm 命令直接装报依赖错误,说明缺的东西比较多,这时候别硬刚,直接建本地 yum 源:

# 安装 createrepo 工具(如果系统里没有) yum install -y createrepo # 将 rpm 包目录初始化为 yum 仓库 createrepo /root/stress-rpms/ # 配置本地 repo 文件 cat > /etc/yum.repos.d/local.repo <<EOF [local] name=Local Repository baseurl=file:///root/stress-rpms enabled=1 gpgcheck=0 EOF # 清理缓存并安装 yum clean all yum makecache yum install -y stress

这个方案威力很大,算是一劳永逸。后续如果再往/root/stress-rpms/里丢新的 rpm 包,重新跑一遍createrepo就能用。

3.3 安装成功的验证标准

安装完成后,确认是不是真的装好了,最好做三件事:

# 1. 检查 rpm 数据库 rpm -qa | grep stress # 2. 查看二进制文件路径 which stress # 3. 查看版本 stress --version

如果stress --version能正常输出,说明安装没问题。如果提示找不到共享库,用ldd /usr/bin/stress看看缺了哪个库,再针对性地补。

4. 安装后验证:不跑一次压测不算装完

4.1 快速验证 stress 是否正常工作

装完就跑一个简单压测测试:

# 生成4个worker,每个产生1GB内存压力,运行10秒 stress --vm 4 --vm-bytes 1G --timeout 10s

运行期间,另开一个终端看系统状态:

top # 或者 vmstat 1

如果可以看到 CPU 使用率飙高、内存被用掉一部分,结束后资源回落,说明 stress 工作完全正常。

4.2 压测时常见的组合参数

stress 的主要用法是四类负载:CPU、内存、IO、磁盘。常用组合:

# CPU压力:4个worker跑sqrt() stress --cpu 4 --timeout 60s # 内存压力:2个worker各分配512M stress --vm 2 --vm-bytes 512M --timeout 60s # IO压力:2个worker执行sync() stress --io 2 --timeout 60s # 磁盘压力:1个worker写1GB文件 stress --hdd 1 --hdd-bytes 1G --timeout 60s # 组合压测:CPU+内存同时压 stress --cpu 2 --vm 1 --vm-bytes 1G --timeout 120s

我压测的时候一般会把 timeout 加上,不然 stress 会一直跑,你得手动 Ctrl+C 才停得下来。脚本化运行的时候尤其重要,没有 timeout 的压测一旦忘记关,服务器负载可能持续飘高。

4.3 结果怎么看

跑压测不是跑完就结束了,关键是要会看数据。我一般会同时用三个工具观察:

  • top:看整体负载和CPU使用率
  • vmstat 1:看进程队列、内存换页、IO等待
  • sar -q 1:看运行队列长度和平均负载

比如跑 CPU 压测时,正常现象是top里的 %Cpu 直接跑到接近 100%,vmstat里的 r 列(运行队列)会明显增加。如果 CPU 没跑满,先看看是不是进程数开少了,或者系统里有 CPU 亲和性配置限制了进程。

5. 常见问题与排查技巧实录

5.1 提示依赖缺失:libcrypt.so.1

这是我最常遇到的报错,尤其在一些精简安装的 CentOS 7 上。报错内容类似:

error: Failed dependencies: libcrypt.so.1()(64bit) is needed by stress-1.0.4-16.el7.x86_64

解决办法很简单,找到 libcrypt 的 rpm 包装上就行。如果你按 2.1 的方式用yum install --downloadonly下载,那 libcrypt 应该已经一并被拉下来了。如果是手动下载的,去 CentOS 官方 Base 仓库里找libcrypt-xxx.el7.x86_64.rpm

5.2 提示已安装但执行报错:version GLIBC_XX not found

这个问题多发于跨版本移植二进制的场景。如果你不是用 rpm 包安装的,而是直接拷贝编译好的二进制,很有可能遇到:

stress: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by stress)

这说明二进制是在更高版本的 glibc 环境下编译的。没什么好办法,要么换低版本环境重新编译,要么改用 rpm 包装。这也是我一直强调用 rpm 包的原因之一。

5.3 rpm -ivh 批量安装时,提示某个包已被安装

有时候批量安装会跳出类似:

package stress-1.0.4-16.el7.x86_64 is already installed

这种不算错误,是系统里已经装过 stress 了。如果想强制覆盖,可以加--replacepkgs参数:

rpm -ivh --replacepkgs stress-*.rpm

5.4 创建本地 yum 源报错:repomd.xml 缺失

yum install配合本地源时报错:

[local] 元数据获取失败,找不到 repodata/repomd.xml

原因是 rpm 包目录还没有初始化为仓库。需要先跑createrepo /root/stress-rpms/,并且在配置 baseurl 时,路径要指向包含 repodata 子目录的那一层。

5.5 最小化系统没有 yum 命令怎么办

如果机器是被裁过的 CentOS,连 yum 都没有,那也只能用 rpm 命令直接装了。这种情况 dup 包反而更直接,只是依赖要提前准备好。一个取巧的办法是提前在正常环境跑yum deplist stress查看完整依赖列表,再逐一准备。

6. 一些更高效的扩展思路

6.1 用 dnf 的时候注意参数差异

CentOS 8 里默认的包管理命令是 dnf,但yum命令依然可用(通过符号链接)。在线下载阶段的差异不大:

dnf install --downloadonly --downloaddir=/root/stress-rpms stress

CentOS 8/Stream 9 上,如果你的 dnf 版本较新,可能需要加--destdir代替--downloaddir。不确定的时候,先敲dnf install --help看一眼,再执行。

6.2 多台内网机器复用的最佳实践

如果内网不止一台机器,那别一台台传包了,直接在局域网里找一台机器做 HTTP 源。把 rpm 目录用 nginx 或 python http.server 暴露出来,其他机器配置 repo 文件指向它就行。

# 在装有rpm包目录的机器上临时启一个http服务 cd /root/stress-rpms python3 -m http.server 8080

然后其他机器配置:

cat > /etc/yum.repos.d/http.repo <<EOF [http-stress] name=HTTP Stress Repo baseurl=http://192.168.1.100:8080 enabled=1 gpgcheck=0 EOF

这个思路特别适合大规模集群批量部署,省去一遍遍拷U盘的时间。

6.3 搭配监控命令形成完整压测方案

stress 本身不带图表和报表,但它和监控命令搭配起来就是一套完整的压测方案。我最常用的组合是:

stress --cpu 8 --vm 2 --vm-bytes 2G --timeout 300s & sleep 1 vmstat 1 300 > /tmp/stress-test.log & sar -q 1 300 > /tmp/load.log & watch -n 5 'uptime; free -h; top -bn1 | head -15'

压测结束之后,直接看日志文件就能复盘系统表现,不用守在终端前盯一整天。

6.4 关于 stress-ng 的补充建议

如果你的服务器上不方便困于 stress 的老版本,其实还可以考虑 stress-ng,它是 stress 的增强版,功能更多,压测项细粒度更高。下载思路完全一样:

yum install --downloadonly --downloaddir=/root/stress-ng-rpms stress-ng

stress-ng 的 CPU 压测可以细分成整数运算、浮点运算、矩阵运算等几十种负载模式,如果你需要模拟特定的业务压力模型,它比 stress 灵活太多。但日常快速验证,stress 够了。

写在最后

离线安装 stress 这件事,看着简单,实际上很考验一个运维对包管理和依赖关系的理解程度。你如果从头到尾手动趟一遍,会发现最花时间的不是安装本身,而是准备安装包时的版本匹配和依赖梳理。第一次可能折腾半小时,第二次十分钟内就能搞定,第三次基本可以闭着眼操作了。

我个人在实操中还有一个习惯:装完之后,把当时用的 rpm 包按软件名-版本号-系统版本的命名格式留存一份,放到公共的软件仓库目录里。几次下来,手里攒的离线包越全,后续干活越省事。希望这篇内容能让你在面对内网环境时心里更有底,少踩几个我踩过的坑。

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

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

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

立即咨询