【发布时间】:2014-12-12 11:52:36
【问题描述】:
我正在运行一个处理成千上万个并发 Web 套接字连接的 Web 服务器。为此,在 Debian linux 上(我的基础镜像是 google/debian:wheezy,在 GCE 上运行),打开文件的默认数量设置为 1000,我通常只需将 ulimit 设置为所需的数量(64,000) .
这很好,除了当我对我的应用程序进行 docker 化并部署它时——我发现 docker 有点忽略了限制定义。我尝试了以下方法(全部在主机上,而不是在容器本身上):
MAX=64000
sudo bash -c "echo \"* soft nofile $MAX\" >> /etc/security/limits.conf"
sudo bash -c "echo \"* hard nofile $MAX\" >> /etc/security/limits.conf"
sudo bash -c "echo \"ulimit -c $MAX\" >> /etc/profile"
ulimit -c $MAX
在做了一些研究后,我发现人们可以通过这样做来解决类似的问题:
sudo bash -c "echo \"limit nofile 262144 262144\" >> /etc/init/docker.conf"
并重新启动/重新启动 docker 服务。
但是,以上所有方法都失败了:当我的应用在容器内运行时出现“打开的文件过多”错误(在没有 docker 的情况下执行以下操作可以解决问题)。
我已尝试在容器内运行ulimit -a 以获取 ulimit 设置是否有效的指示,但这样做会引发错误,提示 ulimit 不是作为 PATH 一部分的可执行文件。
有人遇到过这个问题和/或可以提出一种让 docker 认识到限制的方法吗?
【问题讨论】:
标签: linux debian docker google-compute-engine ulimit