0

0

Linux stress-ng 的 CPU / memory / io stressor 与压力测试模板

冰川箭仙

冰川箭仙

发布时间:2026-02-22 20:41:03

|

308人浏览过

|

来源于php中文网

原创

stress-ng 的 --cpu 参数需配合 --cpu-method all 和 --affinity 才能真正打满逻辑核,否则因调度和频率缩放导致利用率不达标;--vm 必须加 --vm-keep 才持久占内存;--hdd 比 --io 更真实测盘,需加 --hdd-opts sync 绕过缓存。

linux stress-ng 的 cpu / memory / io stressor 与压力测试模板

stress-ng 的 CPU 压力测试怎么选 --cpu 参数才不白跑

stress-ng--cpu 并不是“开几个核就压几个核”,它默认启动的是 cpu stressor,每个 worker 运行一个计算密集型循环(比如 sqrt()sin()),但实际 CPU 占用率受调度、频率缩放、Turbo Boost 影响很大。常见错误是只写 stress-ng --cpu 4,结果 top 里看到 300% 而非 400%,甚至某些核心空闲。

  • --cpu 4 启动 4 个独立 worker,但不绑定到特定 CPU 核心,可能被调度器挤到同一物理核上
  • 想真正打满所有逻辑核,得配合 --cpu-method all(启用全部可用算法)+ --affinity(强制绑核)
  • 如果目标是模拟持续高负载而非峰值,加 --timeout 60s--metrics-brief 看真实平均利用率
  • 注意:Intel 的 intel_idle 驱动或 AMD 的 acpi_cpufreq 可能让空闲核快速降频,导致 stress-ng --cpu N 初期飙升、后期回落——这不是 bug,是电源管理在生效
stress-ng --cpu 8 --cpu-method all --affinity --timeout 30s --metrics-brief

内存压力测试别只用 --vm,--vm-keep 才决定是否真占内存

--vm 默认行为是分配内存 → 写入 → 释放 → 重分配,所以 free -h 看不到长期占用,ps aux 里 RSS 也忽高忽低。很多人误以为没压上,其实是 stress-ng 在“反复申请释放”,内核的 LRUpage reclaim 机制让它看起来“不持久”。

  • --vm-keep 是关键开关:开启后分配的内存不会被 munmap,RSS 稳定上涨直到 OOM 或达到 --vm-bytes 限制
  • 默认每个 --vm worker 分配 256MB,想压满 16GB 内存?得算清楚:--vm 64 --vm-bytes 256M --vm-keep(64 × 256MB = 16GB)
  • 不加 --vm-keep 时,--vm-bytes 只控制单次分配大小,不是总用量
  • 注意:如果系统启用了 swappiness=1 或 cgroup memory limit,--vm-keep 可能触发 swap 或被 OOM killer 杀掉,得提前查 /proc/sys/vm/swappinesscat /sys/fs/cgroup/memory/memory.limit_in_bytes

IO 压力测试用 --io 不如直接用 --hdd + --hdd-opts sync

--io stressor 实际调用的是 posix_fadvise()read()/write() 循环,但它默认使用 buffered I/O,大量数据会卡在 page cache 里,iostat -x 1 看不到真实磁盘 IO(%util 低、await 也不高),容易误判存储性能。

星绘
星绘

豆包旗下 AI 写真、P 图、换装和视频生成

下载
  • 真实测盘?用 --hdd:它直接 open(O_DIRECT) + write(),绕过 page cache,iostatiotop 数据才可信
  • --hdd-opts sync 强制每次 write() 后 fsync(),模拟数据库类同步写场景;不加则类似日志追加(异步刷盘)
  • --hdd-bytes 控制每个 worker 写入总量,不是文件大小——它会反复覆写同一块区域,避免磁盘爆满
  • 坑点:NVMe 盘上 --hdd 可能触发控制器队列饱和,iostat 显示 qcut > 0,此时需配合 --hdd-ops 限速,否则测试失真

组合压测模板要防资源抢占,--class 和 --sequential 得搭配用

想同时跑 CPU + 内存 + IO?直接 stress-ng --cpu 4 --vm 2 --hdd 1 很危险:所有 stressor 默认并发启动,IO worker 可能把 CPU worker 挤出运行队列,top 看起来像“CPU 没压上”,其实是调度干扰。

  • --class io / --class cpu 只是标签,不影响调度;真正可控的是 --sequential(串行启动)和 --timeout(统一收口)
  • 推荐模板:stress-ng --cpu 4 --vm 2 --vm-keep --hdd 1 --hdd-opts sync --timeout 60s --metrics-brief --verbose
  • --verbose 能看到每个 worker 启动时间戳,方便排查是否某类 stressor 启动失败(比如 --hdd 因权限/空间不足静默跳过)
  • 更稳的做法:分阶段压,用 shell 控制节奏,比如先 stress-ng --cpu 4 --timeout 30s,再 stress-ng --vm 4 --vm-keep --timeout 30s,避免 OOM killer 误杀关键进程

复杂点在于:stress-ng 的每个 stressor 对内核子系统的影响路径不同,CPU 压的是 scheduler 和 frequency scaling,内存压的是 buddy allocator 和 LRU,IO 压的是 block layer 和 device queue——它们不是线性叠加,而是互相扰动。跑一次就断言“系统扛得住”,往往漏掉了调度延迟、page fault spike 或 I/O completion 中断堆积这些隐性瓶颈。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

421

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

595

2023.08.10

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

686

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

22

2025.12.06

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

464

2023.08.14

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

374

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2094

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

356

2023.08.31

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1030

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.5万人学习

Git 教程
Git 教程

共21课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号