了解Docker容器资源使用情况
我有运行Ubuntu 16.04的服务器运行一个Nginx容器的Docker 17.03.0-ce。 该服务器还安装了ConfigServer安全和防火墙 。 在启动Nginx容器后不久,我开始收到有关“过度使用资源”的电子邮件,其中包含以下详细信息:
Time: Fri Mar 24 00:06:02 2017 -0400 Account: systemd-timesync Resource: Process Time Exceeded: 1820 > 1800 (seconds) Executable: /usr/sbin/nginx Command Line: nginx: worker process PID: 2302 (Parent PID:2077) Killed: No
我完全理解我可以将exe:/usr/sbin/nginx
到csf.pignore来停止这些电子邮件警报,但是我想首先了解一些事情。
- 为什么要报告“systemd-timesync”帐户? 这似乎与Docker没有任何关系。
- 为什么主机似乎报告在容器中运行的东西时,过度的资源使用(扩展的处理时间)?
- 为什么其他docker集装箱不运行Nginx不会导致过多的资源使用电子邮件?
我相信还有其他的问题,但基本上,这是为什么被报道的方式?
我至less可以回答前两个问题:
与真正的虚拟机不同,Docker容器只是在主机系统内核下运行的一系列进程。 他们对某些系统资源有不同的看法,包括他们自己的文件层次结构,他们自己的PID名称空间和他们自己的/etc/passwd
文件。 因此,如果您在主机上运行,它们仍然会显示出来。
nginx容器的/etc/passwd
包含一个运行nginx工作进程的UID为104的用户'nginx'。 但是,在主机的/etc/passwd
,UID 104可能属于完全不同的用户,例如systemd-timesync
。
因此,如果您运行ps aux | grep nginx
在容器中的ps aux | grep nginx
,你可能会看到
nginx 7 0.0 0.0 32152 2816 ? S 11:20 0:00 nginx: worker process
而在主机上,你看
systemd-timesync 22004 0.0 0.0 32152 2816 ? S 13:20 0:00 nginx: worker process
即使两者都是相同的过程(还要注意不同的PID名称空间;在容器中,PID从1再次计数)。
因此,容器进程仍然会受到ConfigServer的资源监视,但是它们可能会随机显示,甚至不存在用户帐户。
至于为什么nginx触发电子邮件和其他容器不这样做,我只能假设nginx是您的容器中唯一跨越ConfigServer的资源阈值的容器。