apache2ctl: 87: ulimit: limit ustawienia błędu (Operacja niedozwolona)

12

Serwer działa dobrze - a przynajmniej tak się wydaje - ale zawsze występuje następujący błąd:

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

Dzieje się tak z Apache 2.2.22-9 na Debian Wheezy.

# apache2ctl configtest

/ usr / sbin / apache2ctl: 87: ulimit: limit ustawienia błędu (Operacja niedozwolona)
Składnia OK

# service apache2 reload

[....] Ponowne ładowanie konfiguracji serwera WWW: apache2 / usr / sbin / apache2ctl: 87: ulimit: limit ustawiania błędów (Operacja niedozwolona)
. dobrze

# service apache2 restart

[....] Ponowne uruchamianie serwera WWW: apache2 / usr / sbin / apache2ctl: 87: ulimit: limit ustawiania błędów (Operacja niedozwolona)
... czekanie / usr / sbin / apache2ctl: 87: ulimit: limit ustawiania błędów (Operacja niedozwolone)
. dobrze

# service apache2 status

Apache2 jest uruchomiony (pid 32045).

Pascal Polleunus
źródło
1
Zobacz, co masz w /etc/security/limits.conf i /etc/security/limits.d. Wygląda na to, że masz zmienną APACHE_ULIMIT_MAX_FILES (zobacz w / usr / sbin / apache2ctl) zmienną ustawioną na coś większego niż limit w tych plikach.
HUB

Odpowiedzi:

16

Może to pomóc: - http://ubuntuforums.org/showthread.php?p=11950245#post11950245

sudo service apache2 restart # no errors
service apache2 restart      # errors
Mukesh Chapagain
źródło
Dzięki, już to widziałem, ale to nie pomaga. Używanie sudo lub nic nie zmienia, mam ten sam błąd.
Pascal Polleunus
1
Pracował dla mnie! Całkowicie zapomniałem sudo.
ThomasReggi
2
+1 magia sudozawsze załatwia sprawę
rower
nawet najgorsze, mam konfigurację dokera, gdzie to aperuje, działa na moim komputerze domowym, ale nie na serwerze ... w pojemniku bez różnicy między nimi ... nie ma dla mnie sensu
superbohater
To samo tutaj superbohater. Również restart nie działa dla mnie z sudo lub bez. Muszę użyć stop, a następnie uruchomić bez sudo, aby to działało.
Shardj
5

Problem wynika z / usr / sbin / apache2ctl (w Debianie). Sprawdź to:

~$ 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

Tutaj ustawia dozwoloną liczbę otwartych plików na 8192. Lub próbowanie i niepowodzenie, w twoim przypadku.

Aby uniknąć błędu, gdy robi to apache2ctl, dostosuj ustawienia systemu w pliku /etc/security/limits.conf, dodając te dwa wiersze:

*               soft    nofile          8192
*               hard    nofile          8192

Nie zwiększyłem go do poziomu większego niż to konieczne (8192), ponieważ nie wiem, co jeszcze wpłynie. Pozbywa się to jednak ostrzeżenia.

Nie jestem pewien, czy po tym będziesz musiał ponownie uruchomić system, ponieważ w elementach ulimits znajduje się element dynamiczny, którego nie znam. Możesz jednak wystarczająco łatwo przetestować, aby dowiedzieć się, jaka jest twoja obecna liczba plików ulimit:

ulimit -n

Możesz przeczytać, gdzie go znalazłem: stackoverflow - ustawianie ulimit

Adam
źródło
Jak mam wykonać operację odwrotną i zmniejszyć limit Apache?
eri0o,
Widząc, że skrypt, który opublikowałem w odpowiedzi, pochodzi bezpośrednio ze skryptu apache2ctl, który jest zainstalowany przez apache, będziesz musiał przejść do tego pliku skryptu i go zmienić, zakładając, że masz prawo dostępu i zakładając, że chcesz powtórzyć akcja przy każdej aktualizacji Apache.
Adam,
2

1. Sprawdź i zmodyfikuj wartość ulimit na swoim komputerze. Dodaj wartości do pliku / etc / profile, a następnie zastosuj.

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

lub możesz:

sudo sh -c 'printf "\nulimit -HSn 999999\n" >> /etc/sysconfig/docker'

2. Uruchom ponownie usługę dokowania i skonfiguruj, aby konfiguracja była skuteczna.

sudo service docker restart

3. Przetestuj ulimit w pojemniku.

ulimit -n

To jest mój wynik testu!

Wskazówki: Być może możesz także wypróbować poniższe polecenie (warunek: ulimit na komputerze-hoście powinien być większy niż 8192), ale nie powiodło się .

docker run --privileged -it -p xxxx:80 --ulimit data=8192 linode/lamp /bin/bash
użytkownik3772170
źródło
$ ulimit -n 8192daje mi-bash: ulimit: open files: cannot modify limit: Operation not permitted
Shardj