stress-test 镜像
压力测试镜像,为 auto-check 提供预装压测工具与测试脚本的容器环境。压测统一在容器内执行,无需在目标机在线安装任何依赖。
工作流程
┌─────────────────────────────────────────────────────────────┐
│ auto-check 工作流程 │
│ │
│ 1. 检测目标机器的 Docker 可用性 │
│ 2. 检查镜像是否存在(不存在则上传本地导出的 tar 并 docker load)│
│ 3. 启动容器执行测试(脚本已打包在镜像中) │
│ 4. 收集测试结果并解析 │
│ 5. 生成报告 │
└─────────────────────────────────────────────────────────────┘
优势
| 特性 | 说明 |
|---|---|
| 工具获取 | 预装在镜像中,无需在线安装 |
| 网络依赖 | 镜像已缓存后目标机无需联网 |
| 环境一致性 | 统一的容器环境,不受目标机发行版差异影响 |
构建与导出(维护时使用)
固定分发模式:不依赖 registry,镜像以 tar 文件形式放在工程目录,
目标机无镜像时由 auto-check 自动上传并 docker load。
推荐:使用构建脚本(自动时间戳 tag)
build.sh 会以 YYYYMMDD-HHMMSS 格式自动生成时间戳 tag(如 stress-test:20260824-153045),
便于在 docker images 中一眼区分新旧版本。脚本会同时:
- 用时间戳 tag 构建镜像(不再保留
latest) - 导出两份 tar:带时间戳的归档 + 同步覆盖
stress-test.tar(auto-check 默认引用) - 自动更新
auto-check.yaml的docker_image字段,确保配置与新 tag 同步
cd docker/stress-test
./build.sh # 自动取当前时间戳
./build.sh 20260824-153045 # 手动指定时间戳(重打/复现)
产物:
| 文件 | 用途 |
|---|---|
镜像 stress-test:<时间戳> |
唯一 tag,docker images 可看到每次构建 |
Tar stress-test-<时间戳>.tar |
带时间戳归档,保留历史版本 |
Tar stress-test.tar |
auto-check 默认引用,脚本自动覆盖为最新 |
auto-check.yaml |
docker_image 自动同步为新 tag |
旧时间戳镜像可手动
docker rmi stress-test:<旧时间戳>清理。
手动构建(不推荐)
如需绕过脚本手动构建,必须自行同步 auto-check.yaml:
cd docker/stress-test
docker build -t stress-test:20260824-153045 . # 必须带时间戳
docker save -o stress-test.tar stress-test:20260824-153045
# 然后编辑 ../../auto-check.yaml,把 docker_image 改成新 tag
注意:手动构建如忘记带时间戳,重复构建后会丢失版本信息,调试时易混淆。
使用
在 auto-check.yaml 中配置(docker_image 由 build.sh 自动维护):
stress:
docker_image: "stress-test:20260824-153045" # 每次构建自动更新为新时间戳
docker_tar: "docker/stress-test/stress-test.tar"
docker_args: "--network=host --privileged"
环境变量
容器运行时通过以下环境变量传入参数:
| 变量 | 说明 | 默认值 |
|---|---|---|
AUTOCHECK_TYPES |
测试类型(逗号分隔) | cpu,memory |
AUTOCHECK_DURATION |
持续时间(秒) | 30 |
AUTOCHECK_THREADS |
线程数 | 4 |
AUTOCHECK_MEM_SIZE_MB |
内存压测大小 | 0 (自动) |
AUTOCHECK_DISK_SIZE_MB |
磁盘压测大小 | 1024 |
AUTOCHECK_DISK_DIR |
磁盘压测目录 | /tmp |
AUTOCHECK_TEMP_INTERVAL |
温度采样间隔 | 10 |
AUTOCHECK_SAMPLE_INTERVAL |
运行时采样间隔 | 2 |
容器内执行流程(run.sh)
- 系统信息(
===SYSTEM_INFO===) - 温度监控后台采样(
temp_start.sh) - 各项压测:先单项(cpu/memory/disk/memnative)、综合(full)最后
- 温度监控收尾(
===MONITOR:temp===) - 内核日志(
===MONITOR:dmesg===,-T带时间戳)+ 结束标记
容器运行时挂载(由 auto-check 自动添加)
| 挂载 | 作用 |
|---|---|
-v /sys:/sys:ro |
容器内是独立 sysfs,挂载后才能读到宿主机硬件传感器(温度采集依赖此项) |
-v /etc/localtime:/etc/localtime:ro |
容器时区与宿主机一致,dmesg 时间戳与采样时间才准确 |
注意:镜像内已设置
LC_ALL=C.UTF-8。若 locale 为纯 C,sensors会输出 "+51.0 C"(无 ° 符号),导致温度正则失配、采集不到数据。
镜像内容
/stress-test/
├── Dockerfile # 镜像定义
├── scripts/ # 测试脚本
│ ├── run.sh # 入口脚本
│ ├── cpu.sh # CPU 压测
│ ├── memory.sh # 内存压测
│ ├── disk.sh # 磁盘压测
│ ├── full.sh # 综合压测
│ ├── memnative.sh # 内存精压
│ ├── sysinfo.sh # 系统信息
│ ├── temp_start.sh # 温度监控启动
│ ├── temp_end.sh # 温度监控收尾
│ └── dmesg.sh # 内核日志
└── README.md # 本文档
依赖工具
| 工具 | 用途 |
|---|---|
stress-ng |
CPU/内存/磁盘压测 |
fio |
磁盘 IO 测试 |
lm-sensors |
温度监控 |
sysstat |
系统性能统计 |
procps |
进程监控 |