stressapptest 在线压测
stressapptest 用多个线程同时对内存做写入与校验,并叠加 CPU 与磁盘负载,模拟出接近真实业务的访问模式。相比只做单纯数据比对的工具,它更接近「压力下的稳定性验证」,因此常出现在服务器 burn-in 与换件复测流程里。它运行在操作系统内,与离线测试工具互补:离线覆盖全内存区域,在线验证真实负载下的表现。
基本信息
| 适用平台 | Linux(发行版仓库或源码编译,Apache-2.0 许可) |
|---|---|
| 关键参数 | 测试时长、使用内存量、线程数、写入模式 |
| 输出关注 | 校验错误行、纠错记录、进程退出码 |
| 配合工具 | 离线测试工具与 memtester 互补 |
| 执行窗口 | 维护窗口内执行,提前准备回退方案 |
| 记录要求 | 输出日志与结论一并归档 |
典型使用场景
- 新机 burn-in:作为整机老化测试的内存部分
- 换件复测:确认新内存条在负载下稳定
- 间歇性故障排查:复现只在压力下出现的错误
- 交付验收:作为稳定性测试项留存记录
- 与内存纠错计数对照,验证错误是否可复现
典型压测
典型压测
# 常用参数组合:时长、内存量、线程数与写入模式
stressapptest -s 3600 -M 4096 -m 8 -W --printsec 10 2>&1 | tee sat.log
# -s 测试秒数 -M 使用内存(MB) -m 线程数
# -W 全写模式 --printsec 进度输出间隔(秒)
# 测试期间观察内核侧是否出现纠错记录
dmesg -T | grep -iE 'edac|mce|memory error' | tail -10
# 结束后核对退出码与日志中的错误行
grep -iE 'error|mismatch|fail' sat.log | head结果判读
| 现象 | 含义 | 后续动作 |
|---|---|---|
| 正常运行到结束且无错误行 | 该轮验证通过 | 归档日志,结合离线测试结论综合判断 |
| 日志出现校验不一致 | 检测到内存数据错误 | 保存日志,结合 EDAC 与 SEL 定位部件 |
| 进程异常退出 | 资源或环境问题 | 查看退出码与系统日志后再决定是否重跑 |
| 耗时远超预期 | 内存量大或系统负载高 | 在维护窗口内预留足够时间 |
| 内核侧出现纠错记录 | 硬件层已记录问题 | 以硬件侧记录为准安排后续处理 |
使用内存量不要超过系统可用内存:压到交换空间会引入大量磁盘 IO,既拖慢测试也改变故障表现方式。
压测会长时间占满内存与 CPU:业务高峰执行会直接影响线上服务,务必在维护窗口内进行。