一、问题现象
1、主机上面所有docker容器通过docker stats获取不到动态的资源利用率;docker top无进程信息.
2、但是各个容器正常运行,容器内部进程可以正确查询到,并且容器承载的服务正常
二、问题分析
因为只是资源使用和进程信息从宿主机侧无法获取,怀疑跟docker使用cgroup实现资源隔离控制有关系,查看了容器对应的cpu/mem等的cgroup组cgroup.procs文件,发现该文件中对应的进程组丢失。但是对于为何出现这种现象,咨询了现场同事,一开始反馈没有对环境做过特殊操作,家里实验室环境也反馈未进行特殊操作和配置,一时感觉问题现象和实际情况无法匹配,同事一开始怀疑是docker资源计算的问题,研究了docker资源利用率计算代码,通过命令行和api获取资源数据发现压根没有更新,最终确认该问题跟资源计算无关。
继续朝着cgroup的方向怀疑和分析,查看了部分git问题和systemd的一些问题修改,坚定认为还是cgroup问题。
三、问题复现场景
问题复现步骤:
a:启动一个容器:docker run -tid 10.1.245.31:5000/tomcat_hps:1.0
b: 重新加载systemd的配置:systemctl daemon-reload
c: 重启主机上面任意一个systemd控制的服务(非docker):systemctl restart sshd
执行完上面步骤a之后,容器正确拉起,并且可以通过docker top查询到进程信息,通过docker stats获取资源使用情况;执行完步骤c,之后再次查