服务器运行良好——或至少看上去如此——但总是出现以下错误:
apache2/usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)
这发生在 Debian Wheezy 上的 Apache 2.2.22-9 中。
# apache2ctl configtest
/usr/sbin/apache2ctl: 87: ulimit: 错误设置限制(操作不允许)
语法 OK
# service apache2 reload
[...] 重新加载 Web 服务器配置:apache2/usr/sbin/apache2ctl:87:ulimit:设置限制时出错(操作不允许)
。确定
# service apache2 restart
[...] 重新启动 Web 服务器:apache2/usr/sbin/apache2ctl:87:ulimit:设置限制时出错(不允许操作)
... 等待 /usr/sbin/apache2ctl:87:ulimit:设置限制时出错(不允许操作)
。确定
# service apache2 status
Apache2 正在运行(pid 32045)。
答案1
这可能会有所帮助:-http://ubuntuforums.org/showthread.php?p=11950245#post11950245
sudo service apache2 restart # no errors
service apache2 restart # errors
答案2
问题源于 /usr/sbin/apache2ctl(在 Debian 上)。检查一下:
~$ grep ULIMIT /usr/sbin/apache2ctl
ULIMIT_MAX_FILES="${APACHE_ULIMIT_MAX_FILES:-ulimit -n 8192}"
if [ "x$ULIMIT_MAX_FILES" != "x" ] ; then
$ULIMIT_MAX_FILES
这里将允许打开的文件数设置为 8192。或者,在您的情况下尝试但失败。
因此,为了避免 apache2ctl 执行此操作时出现错误,请在 /etc/security/limits.conf 文件中添加以下两行来调整系统设置:
* soft nofile 8192
* hard nofile 8192
我没有将其增加到超过必要值(8192),因为我不知道它还会产生什么影响。不过,这可以消除警告。
不确定之后是否需要重启系统,因为 ulimits 中有一个动态元素,我对此并不熟悉。不过,您可以轻松测试以找出当前 ulimit 文件数:
ulimit -n
你可能想看看我在哪里找到的:stackoverflow - 设置 ulimit
答案3
1.检查并修改限制在主机中。在文件中添加值/etc/配置文件然后使其生效。
ulimit -u 10240
ulimit -n 8192 #This configuration is what we most needed
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited
source /etc/profile
或者你可以:
sudo sh -c 'printf "\nulimit -HSn 999999\n" >> /etc/sysconfig/docker'
2.重启docker服务,使配置生效。
sudo service docker restart
3.测试容器内的ulimit。
ulimit -n
提示:您也可以尝试以下命令(前提条件:主机中的 ulimit 应大于 8192 ),但我失败了。
docker run --privileged -it -p xxxx:80 --ulimit data=8192 linode/lamp /bin/bash