docker mem_cgroup_oom_synchronize
  P4Buhht98JbZ 2023年11月19日 46 0

Docker mem_cgroup_oom_synchronize 实现流程

本文将介绍如何实现 docker mem_cgroup_oom_synchronize,以帮助刚入行的开发者快速掌握这个知识点。下面是整个过程的流程图:

flowchart TD;
    Start((开始)) --> Step1[配置Docker];
    Step1 --> Step2[修改Docker配置文件];
    Step2 --> Step3[重启Docker服务];
    Step3 --> Step4[创建OOM Synchronize脚本];
    Step4 --> Step5[修改cgroup配置文件];
    Step5 --> Step6[重启Cgroup服务];
    Step6 --> Step7[验证设置是否生效];
    Step7 --> End((结束));

Step 1: 配置 Docker

首先,我们需要确保 Docker 已正确安装并运行。如果还没有安装 Docker,请按照官方文档进行安装。

Step 2: 修改 Docker 配置文件

接下来,我们需要修改 Docker 的配置文件,以便启用 mem_cgroup_oom_synchronize 功能。使用以下命令打开 Docker 的配置文件:

sudo vi /etc/docker/daemon.json

在文件中添加以下内容:

{
    "cgroup-parent": "/docker",
    "oom-score-adjust": -999
}

这里的 "cgroup-parent": "/docker" 是指定 Docker 使用的 cgroup 分组的路径,可以根据实际需求进行修改。"oom-score-adjust": -999 则是设置 OOM score 的调整值,-999 表示最高优先级。

Step 3: 重启 Docker 服务

保存并关闭配置文件后,我们需要重启 Docker 服务,以使修改生效。使用以下命令重启 Docker 服务:

sudo systemctl restart docker

Step 4: 创建 OOM Synchronize 脚本

现在,我们需要创建一个 OOM Synchronize 脚本,以便在容器内发生 OOM 时通知 Docker。使用以下命令创建 oom_synchronize.sh 脚本:

sudo vi /usr/local/bin/oom_synchronize.sh

在脚本中添加以下内容:

#!/bin/sh

echo "1" > /sys/fs/cgroup/memory/docker/<container_id>/memory.oom_control
echo "oom" > /proc/self/oom_control

注意,上述代码中的 <container_id> 需要替换为实际容器的 ID。

Step 5: 修改 cgroup 配置文件

为了使 OOM Synchronize 脚本正常工作,我们还需要修改 cgroup 的配置文件。使用以下命令打开 cgroup 配置文件:

sudo vi /etc/systemd/system/docker.service.d/cgroup_parent.conf

在文件中添加以下内容:

[Service]
ExecStartPost=/bin/bash -c 'echo $MAINPID > /sys/fs/cgroup/memory/docker/<container_id>/cgroup.procs'

同样,上述代码中的 <container_id> 需要替换为实际容器的 ID。

Step 6: 重启 cgroup 服务

保存并关闭文件后,我们需要重启 cgroup 服务,以使修改生效。使用以下命令重启 cgroup 服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

Step 7: 验证设置是否生效

最后,我们需要验证 docker mem_cgroup_oom_synchronize 是否已成功实现。使用以下命令启动一个容器,并在容器内使用大量内存:

docker run -it --memory=1G ubuntu:latest /bin/bash

在容器内执行以下命令,触发 OOM:

stress --vm-bytes $(awk '/MemFree/{printf "%d\n", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1

观察 Docker 日志,如果能看到类似以下内容,则说明设置成功:

<container_id>:oom_notify: OOM killer terminated this process

至此,我们已经成功实现了 docker mem_cgroup_oom_synchronize 功能。

希望本文对你有所帮助,如果有任何问题,请随时提问。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: docker run bash 下一篇: docker cmd不执行
  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
  HJwyUgQ6jyHT   2024年05月31日   36   0   0 dockerwebhook
  zNRyot8onCGb   2024年05月31日   37   0   0 容器docker
  zNRyot8onCGb   2024年05月31日   33   0   0 容器docker