Linux系统稳定性守护者:stress工具实战指南(CPU、内存、IO全场景)

张开发
2026/4/19 18:09:35 15 分钟阅读

分享文章

Linux系统稳定性守护者:stress工具实战指南(CPU、内存、IO全场景)
1. 为什么需要stress工具刚入行做运维那会儿我最怕遇到系统莫名其妙崩溃的情况。有一次半夜被报警叫醒发现线上服务响应缓慢查了半天才发现是某个新上线的服务吃光了所有CPU资源。要是早点用stress做个压力测试可能就能避免这次事故了。stress就像个系统体检医生它能给CPU、内存、磁盘这些关键部件施加压力帮我们提前发现系统的体能极限。比如新服务器上线前想知道它到底能扛多少并发系统扩容后想确认新增的资源真的起作用了遇到性能瓶颈想找出到底是CPU、内存还是磁盘拖了后腿这些场景下stress都能大显身手。它最大的特点是操作简单但效果直接几个命令就能让系统大汗淋漓配合top、htop这些监控工具系统状态一目了然。2. 快速安装stress工具2.1 不同系统的安装方法在CentOS 7上安装最简单直接使用预编译的rpm包wget http://fr2.rpmfind.net/linux/dag/redhat/el7/en/x86_64/dag/RPMS/stress-1.0.2-1.el7.rf.x86_64.rpm rpm -Uivh stress-1.0.2-1.el7.rf.x86_64.rpm如果是较新的系统建议用yum安装yum install -y epel-release yum install -y stress想要最新版的功能可以编译安装stress-ngstress的增强版wget https://kernel.ubuntu.com/~cking/tarballs/stress-ng/stress-ng-0.15.06.tar.gz tar -xzf stress-ng-0.15.06.tar.gz cd stress-ng-0.15.06 make sudo make install2.2 验证安装成功装好后运行这个命令检查版本stress --version # 或者如果是stress-ng stress-ng --version3. CPU压力测试实战3.1 基础CPU压力测试想让CPU火力全开很简单stress -c 4这个命令会创建4个worker进程不停计算平方根把CPU占满。数字4表示要占用的CPU核心数根据你的机器配置调整。测试时建议开两个终端窗口一个运行stress一个运行htop观察CPU使用率你会看到所有CPU核心都变成100%红色就像这样CPU1 [||||||||||||||||||||||||||||||||||||||||||||||||||100.0%] CPU2 [||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]3.2 高级CPU测试技巧如果想更精确控制CPU负载可以用stress-ngstress-ng --cpu 2 --cpu-load 80这个命令会让2个CPU核心保持在80%左右的负载模拟真实业务场景。还可以测试CPU缓存压力stress-ng --cache 2 --cache-level 1这个命令会专门对L1缓存施加压力适合测试CPU密集型应用。4. 内存压力测试详解4.1 基础内存测试模拟内存不足的场景特别有用stress --vm 4 --vm-bytes 1G --vm-keep这个命令会启动4个worker进程--vm 4每个分配1GB内存--vm-bytes 1G持续占用不释放--vm-keep用free -h命令观察会发现可用内存(available)快速下降。当内存不足时系统会开始用swap这时用top能看到swap使用量增加。4.2 内存测试注意事项不要一次性申请超过物理内存的量否则可能触发OOM killer直接杀进程测试时可以配合vmstat观察内存和swap变化vmstat 1如果想模拟内存泄漏场景可以去掉--vm-keep参数让内存不断分配释放5. 磁盘IO压力测试技巧5.1 基础IO测试这个命令会产生4个进程不停调用syncstress -i 4用iostat观察磁盘利用率iostat -x 1重点看%util这一列数值越高表示磁盘越忙。5.2 文件写入测试更真实的测试是实际写文件stress -d 1 --hdd-bytes 10G这个命令会创建1个worker进程-d 1每次写入10GB大小的文件--hdd-bytes 10G配合iotop工具可以清楚看到哪个进程在疯狂写磁盘iotop -o5.3 精准磁盘测速stress的磁盘测试可能不够准确这时可以用dd命令# 测试纯写入速度写入缓存 time dd if/dev/zero of./testfile bs1G count1 oflagdirect # 测试真实磁盘写入速度 time dd if/dev/zero of./testfile bs1G count1 convfsync注意两者的区别oflagdirect会绕过系统缓存convfsync会在最后同步到磁盘。6. 综合测试与监控技巧6.1 同时测试多个资源stress最强大的地方是可以组合测试stress -c 4 -m 2 --vm-bytes 1G -i 1 -d 1 --hdd-bytes 10G这个命令会同时占用4个CPU核心占用2GB内存产生1个IO进程进行磁盘写入测试6.2 推荐监控组合测试时要多开几个终端窗口监控CPU监控htop内存监控watch -n 1 free -h磁盘监控iostat -x 1综合监控dstat -cmdr --disk-util6.3 测试时长控制默认stress会一直运行可以用-t参数指定时长stress -c 4 -t 60s # 测试60秒测试完成后所有资源会自动释放系统应该恢复正常状态。如果发现资源没释放可能是stress进程异常退出了可以用ps aux | grep stress检查并手动kill掉。7. 生产环境使用建议不要在正在运行的业务服务器上直接测试最好用专门的测试环境测试前先保存重要数据磁盘测试可能会写满磁盘内存测试要循序渐进避免直接触发OOM导致系统崩溃测试时记录系统基线数据方便对比分析长期运行测试建议用nohupnohup stress -c 4 stress.log 21 测试完成后记得清理测试文件rm -f testfile test.dd我在实际工作中发现很多性能问题都是资源竞争导致的。比如有一次发现服务响应慢用stress单独测试CPU、内存都没问题但组合测试时就出现卡顿最后发现是磁盘IO瓶颈。所以建议大家多做组合测试才能发现真正的系统瓶颈。

更多文章