通用方案:清理Docker宿主机的“/cgroup_ns”目录中以ID命名的子目录

通用方案:清理Docker宿主机的“/cgroup_ns”目录中以ID命名的子目录

更新时间:2020-08-10 15:00:49

1. 概述

本文主要介绍在专有云V3环境中Docker宿主机内,如何清理/cgroup_ns目录中以ID命名的子目录。

1.1. 适用范围

  • 专有云V3,容器服务

1.2. 风险说明

本方案涉及的/cgroup_ns/xxx/tasks文件和/cgroup_ns/xxx/cgroup.procs文件为空时,删除对应的目录对业务无影响。

1.3. 用户告知

如果有多台Docker宿主机需要进行清理,请逐台进行操作,在一台机器上验证完毕后再进行下一台机器的操作。

2. 问题描述

在专有云V3环境中,Docker宿主机的/cgroup_ns目录中以ID命名的子目录较多。当现场产品升级的时候,会有脚本使用find命令检测/cgroup_ns目录中文件的类型,导致机器负载升高。

3. 解决方案

3.1. 环境检查

登录问题机器,依次执行以下命令,确认以ID命名的子目录较多。

cd /cgroup_ns
ls | wc -l

系统显示类似如下。

3.2. 实施步骤

以下是使用clear.sh文件清理目录的操作步骤:

  1. 在问题机器中执行如下命令,进入/opt目录。
    cd /opt
  2. 创建clear.sh文件,并将以下内容添加到clear.sh文件中,然后保存并退出。
    #!/usr/bin/env bash
    for dir in `find /cgroup_ns -maxdepth 1 -type d -name "[0-9]*"`; do
        [[ ! -f ${dir}/tasks ]] && continue
        [[ ! -f ${dir}/cgroup.procs ]] && continue
        [[ "`cat ${dir}/tasks`" == "" ]] && [[ "`cat ${dir}/cgroup.procs`" == "" ]] && rmdir "${dir}"
    done
  3. 执行以下命令,执行clear.sh脚本。
    sh clear.sh &
    系统显示类似如下,则说明脚本执行成功。
    说明:脚本执行完成需要一段时间,请耐心等待。

3.3. 结果验证

登录问题机器,依次执行以下命令,确认以ID命名的子目录已清理完成。

cd /cgroup_ns
ls | wc -l

4. 回滚方案

无需回滚,操作前的情况已是非正常状态。