# 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` 中一眼区分新旧版本。脚本会同时: 1. 用时间戳 tag 构建镜像(**不再保留 `latest`**) 2. 导出两份 tar:带时间戳的归档 + 同步覆盖 `stress-test.tar`(auto-check 默认引用) 3. 自动更新 `auto-check.yaml` 的 `docker_image` 字段,确保配置与新 tag 同步 ```bash 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`: ```bash 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` 自动维护): ```yaml 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 为纯 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` | 进程监控 |