apache2ctl:87:ulimit:错误设置限制(不允许操作)


12

服务器运行正常-或至少看起来正常-但始终存在以下错误:

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
看一下/etc/security/limits.conf和/etc/security/limits.d中的内容。似乎您已将APACHE_ULIMIT_MAX_FILES变量(在/ usr / sbin / apache2ctl中查看)设置为大于该文件中的限制的值。
2012年

Answers:


16

这可能会有所帮助:-http : //ubuntuforums.org/showthread.php?p=11950245#post11950245

sudo service apache2 restart # no errors
service apache2 restart      # errors

谢谢,我已经看到了,但没有帮助。是否使用sudo不会改变任何东西,我有同样的错误。
Pascal Polleunus 2012年

1
为我工作!完全忘记了sudo
ThomasReggi 2012年

2
+1魔法sudo总能解决问题
自行车

更糟糕的是,我有docker setup在其中安装,可以在我的家用计算机上工作,但不能在服务器上工作..在容器中它们之间没有任何区别……对我来说毫无意义
超级英雄

超级英雄也一样。另外,对我来说,重新启动在使用sudo或不使用sudo时均不起作用。我必须使用stop然后在没有sudo的情况下启动才能使其正常工作。
Shardj

5

问题源于/ 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),因为我不知道它还会影响什么。但是,这摆脱了警告。

不知道之后是否需要重新启动系统,因为ulimit中有一个动态元素,我不熟悉。但是,您可以轻松地进行测试以找出当前的ulimit个文件数量是多少:

ulimit -n

您可能想阅读在哪里找到它:stackoverflow-设置ulimit


我将如何做并减少Apache限制?
eri0o

看到我在答案中发布的脚本是直接由apache安装的apache2ctl脚本之外的,那么您将不得不转到该脚本文件并对其进行更改,假设您具有访问权限并假设您愿意重复每次Apache升级时的操作。
亚当

2

1.检查并修改主机中的ulimit值。在文件/ etc / profile中添加值,然后使其生效。

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

$ ulimit -n 8192给我-bash: ulimit: open files: cannot modify limit: Operation not permitted
Shardj
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.