Files
membank/auto-check/docker/stress-test

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 格式自动生成时间戳 tagstress-test:20260824-153045 便于在 docker images 中一眼区分新旧版本。脚本会同时:

  1. 用时间戳 tag 构建镜像(不再保留 latest
  2. 导出两份 tar带时间戳的归档 + 同步覆盖 stress-test.tarauto-check 默认引用)
  3. 自动更新 auto-check.yamldocker_image 字段,确保配置与新 tag 同步
cd docker/stress-test
./build.sh                       # 自动取当前时间戳
./build.sh 20260824-153045       # 手动指定时间戳(重打/复现)

产物:

文件 用途
镜像 stress-test:<时间戳> 唯一 tagdocker 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_imagebuild.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

  1. 系统信息(===SYSTEM_INFO===
  2. 温度监控后台采样(temp_start.sh
  3. 各项压测先单项cpu/memory/disk/memnative、综合full最后
  4. 温度监控收尾(===MONITOR:temp===
  5. 内核日志(===MONITOR:dmesg===-T 带时间戳)+ 结束标记

容器运行时挂载(由 auto-check 自动添加)

挂载 作用
-v /sys:/sys:ro 容器内是独立 sysfs挂载后才能读到宿主机硬件传感器温度采集依赖此项
-v /etc/localtime:/etc/localtime:ro 容器时区与宿主机一致dmesg 时间戳与采样时间才准确

注意:镜像内已设置 LC_ALL=C.UTF-8。若 locale 为纯 Csensors 会输出 "+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 进程监控