You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dockerfile中运行可提升资源统计的无限循环?

模拟Docker容器资源持续增长的实现方案

1. 组合版Dockerfile(同时模拟CPU、内存、块IO增长)

FROM alpine:latest

# 安装压测所需工具
RUN apk add --no-cache bc coreutils

# 复制资源压测脚本
COPY stress.sh /stress.sh
RUN chmod +x /stress.sh

# 启动压测脚本
CMD ["/stress.sh"]

配套的stress.sh脚本内容:

#!/bin/sh

# 内存持续增长:不断往变量里塞数据,避免被系统回收
mem_stress() {
    MEM_DATA=""
    while true; do
        # 每次追加10MB随机数据,可调整大小控制增长速度
        MEM_DATA="$MEM_DATA$(dd if=/dev/urandom bs=10M count=1 2>/dev/null)"
        sleep 0.5
    done
}

# CPU持续占用:跑高精度数学运算,榨干CPU
cpu_stress() {
    while true; do
        # 用bc计算高次自然指数,持续消耗CPU资源
        echo "scale=10000; e(1000)" | bc -l > /dev/null
    done
}

# 块IO持续增长:不断写大文件再读取,产生读写IO
io_stress() {
    while true; do
        # 写入1GB临时文件,不删除的话磁盘占用也会持续上升
        dd if=/dev/zero of=/tmp/io_stress_$(date +%s) bs=1G count=1 2>/dev/null
        # 读取文件,增加读IO负载
        cat /tmp/io_stress_* > /dev/null
        sleep 1
    done
}

# 后台启动所有压测任务
mem_stress &
cpu_stress &
io_stress &

# 保持容器运行
wait

2. 各资源增长的核心逻辑

CPU持续占用

  • 用bc执行高精度数学运算,这类运算会持续占用CPU;如果需要多核负载,多启动几个cpu_stress进程即可。
  • 可以调整计算复杂度(比如修改scale值或运算公式)来控制CPU占用率。

内存持续增长

  • 通过不断往活跃变量里追加数据,让内存被持续占用且不会被系统GC回收;调整bs参数大小可以控制内存增长速度。

块IO持续增长

  • 用dd循环写入大文件,配合读取操作同时产生读写IO;如果需要磁盘空间持续上涨,不要删除生成的临时文件,反之则可以写完就删。

3. 使用步骤

  1. 把Dockerfile和stress.sh放在同一目录
  2. 构建镜像:docker build -t resource-stress .
  3. 启动容器:docker run -d --name stress-test resource-stress
  4. 实时查看资源统计:docker stats stress-test

4. 可选优化(Python版本)

如果觉得shell脚本的内存增长不够稳定,可以改用Python实现内存压测:

# stress.py
import random

mem_list = []
while True:
    # 每次追加10MB数据到列表,内存会持续增长
    mem_list.append(random.randbytes(10 * 1024 * 1024))

对应的Dockerfile改成:

FROM python:3.11-alpine

COPY stress.py /stress.py
CMD ["python", "/stress.py"]

内容的提问来源于stack exchange,提问作者Sumeet Chaudhari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:36:16