了解Docker容器资源使用情况

时间:2017-03-24 13:20:57

标签: nginx docker

我的服务器运行Ubuntu 16.04,Docker 17.03.0-ce运行Nginx容器。该服务器还安装了ConfigServer Security & Firewall。启动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而不会导致过多的资源使用电子邮件?

我确信还有其他问题,但基本上,为什么会按照报道方式报告?

1 个答案:

答案 0 :(得分:1)

我至少可以回答前两个问题:

与真实虚拟机不同,Docker容器只是在主机系统内核下运行的进程集合。它们只对某些系统资源有不同的视图,包括它们自己的文件层次结构,它们自己的PID命名空间和它们自己的/etc/passwd文件。因此,如果您在主机上ps aux,它们仍会显示。

nginx容器/etc/passwd包含用户&nbspx' nginx'使用运行nginx工作进程的UID 104。但是,在主持人/etc/passwd中,UID 104可能属于完全不同的用户,例如systemd-timesync

因此,如果您在容器中运行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资源阈值的容器。