Files
membank/auto-check/docker/stress-test/README.md

141 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` | 进程监控 |