apache2ctl: 87: ulimit: предел установки ошибки (операция не разрешена)

12

Сервер работает нормально - или, по крайней мере, кажется, - но всегда есть следующая ошибка:

apache2/usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)

Это происходит с Apache 2.2.22-9 на Debian Wheezy.

# apache2ctl configtest

/ usr / sbin / apache2ctl: 87: ulimit: предел установки ошибки (операция не разрешена)
Синтаксис ОК

# service apache2 reload

[....] Перезагрузка конфигурации веб-сервера: apache2 / usr / sbin / apache2ctl: 87: ulimit: предел установки ошибки (операция не разрешена)
. Ok

# service apache2 restart

[....] Перезапуск веб-сервера: apache2 / usr / sbin / apache2ctl: 87: ulimit: предел установки ошибки (операция не разрешена)
... ожидание / usr / sbin / apache2ctl: 87: ulimit: предел установки ошибки (операция не разрешено)
. Ok

# service apache2 status

Apache2 работает (pid 32045).

Паскаль Поллеунус
источник
1
Посмотрите, что у вас есть в /etc/security/limits.conf и /etc/security/limits.d. Кажется, что у вас есть переменная APACHE_ULIMIT_MAX_FILES (см. Ее в / usr / sbin / apache2ctl), установленная на что-то большее, чем ограничение в этих файлах.
HUB

Ответы:

16

Это может помочь: - http://ubuntuforums.org/showthread.php?p=11950245#post11950245

sudo service apache2 restart # no errors
service apache2 restart      # errors
Мукеш Чапагейн
источник
Спасибо, я уже видел это, но это не помогает. Использование sudo или нет ничего не меняет, у меня та же ошибка.
Паскаль Поллеунус
1
Работал на меня! Полностью забыл sudo.
ThomasReggi
2
+1 магия sudoвсегда делает свое дело
велосипед
еще хуже, у меня есть настройка докера, где это происходит, работает на моем домашнем компьютере, но не на сервере ... в контейнере без разницы между ними ... для меня нет смысла
супергерой
То же самое здесь супергерой. Кроме того, перезагрузка не работает с или без sudo для меня. Я должен использовать стоп, а затем начать без sudo, чтобы заставить его работать.
Шардж
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), потому что я не знаю, на что еще это повлияет. Однако это избавляет от предупреждения.

Не уверен, что вам нужно будет перезагрузить вашу систему после этого, потому что есть динамический элемент в ulimits, с которым я не знаком. Тем не менее, вы можете проверить достаточно легко, чтобы узнать, каков ваш текущий ulimit num файлов:

ulimit -n

Возможно, вы захотите прочитать, где я его нашел: stackoverflow - настройка ulimit

Адам
источник
Как бы я сделал наоборот и уменьшить лимит Apache?
eri0o
Видя, что сценарий, который я разместил в ответе, прямо из сценария apache2ctl, установленного apache, вам нужно будет перейти к этому файлу сценария и изменить его, предполагая, что у вас есть права доступа и что вы хотите повторить действие с каждым обновлением 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
user3772170
источник
$ ulimit -n 8192дает мне-bash: ulimit: open files: cannot modify limit: Operation not permitted
Shardj