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

多Docker容器运行主机的内存管理方案咨询

Docker容器内存优先级调度与自动暂停恢复方案

一、先给容器标记优先级

启动容器时给不同优先级的容器打上标签,方便后续脚本识别:

# 高优先级容器
docker run -d --label priority=high your-python-image
# 低优先级容器
docker run -d --label priority=low your-python-image

二、自动暂停/恢复脚本实现

写个Shell脚本定时监控主机内存,触发阈值时自动操作低优先级容器:

#!/bin/bash
# 内存占用超过90%时暂停低优先级容器
MEMORY_THRESHOLD=90
# 内存占用低于70%时恢复暂停的容器
MEMORY_RECOVER_THRESHOLD=70

while true; do
    # 计算当前内存使用率(取整数百分比)
    MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}' | cut -d. -f1)
    
    if [ "$MEM_USAGE" -ge "$MEMORY_THRESHOLD" ]; then
        # 暂停所有低优先级运行中容器
        docker ps -q --filter label=priority=low | xargs docker pause 2>/dev/null
    elif [ "$MEM_USAGE" -le "$MEMORY_RECOVER_THRESHOLD" ]; then
        # 恢复所有暂停的低优先级容器
        docker ps -q --filter label=priority=low --filter status=paused | xargs docker unpause 2>/dev/null
    fi
    
    # 每30秒检查一次
    sleep 30
done

脚本后台运行配置

  1. 给脚本加执行权限:
chmod +x container_memory_manager.sh
  1. 用systemd设置开机自启,创建/etc/systemd/system/container-memory-manager.service文件:
[Unit]
Description=Docker容器内存优先级管理脚本
After=docker.service

[Service]
ExecStart=/path/to/container_memory_manager.sh
Restart=always
User=root

[Install]
WantedBy=multi-user.target
  1. 启动并启用服务:
systemctl daemon-reload
systemctl start container-memory-manager
systemctl enable container-memory-manager

三、配合Python脚本内存优化

从根源减少内存占用,降低触发OOM的概率:

  • 用流式处理:不要一次性加载全量数据,用生成器逐块读取处理(比如处理大CSV时用pandas.read_csv(chunksize=10000))。
  • 及时清理内存:用del删除无用变量,调用gc.collect()手动触发垃圾回收。
  • 替换低效数据结构:用numpy数组代替原生列表,用pandas的分类类型存储重复字符串。

四、额外优化:cgroups内存优先级兜底

启动容器时设置--oom-score-adj参数,让系统OOM killer优先选择低优先级容器(作为脚本失效时的兜底):

# 高优先级容器:值越低,越不容易被OOM killer选中
docker run -d --oom-score-adj=-1000 --label priority=high your-python-image
# 低优先级容器:值越高,越容易被选中
docker run -d --oom-score-adj=1000 --label priority=low your-python-image

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:32:33