apache2ctl: 87: ulimit: Fehler Einstellungslimit (Operation nicht erlaubt)


12

Der Server läuft gut - oder zumindest scheint es so - aber es gibt immer den folgenden Fehler:

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

Es passiert mit Apache 2.2.22-9 unter Debian Wheezy.

# apache2ctl configtest

/ usr / sbin / apache2ctl: 87: ulimit: Fehlergrenzwert (Vorgang nicht zulässig)
Syntax OK

# service apache2 reload

[....] Neuladen der Webserverkonfiguration: apache2 / usr / sbin / apache2ctl: 87: ulimit: Fehlergrenzwert (Vorgang nicht zulässig)
. in Ordnung

# service apache2 restart

[....] Neustart des Webservers: apache2 / usr / sbin / apache2ctl: 87: ulimit: Fehlergrenzwert (Vorgang nicht zulässig)
... waiting / usr / sbin / apache2ctl: 87: ulimit: Fehlergrenzwert (Vorgang) nicht erlaubt)
. in Ordnung

# service apache2 status

Apache2 läuft (pid 32045).


1
Schauen Sie sich an, was Sie in /etc/security/limits.conf und /etc/security/limits.d haben. Es scheint, dass Sie die Variable APACHE_ULIMIT_MAX_FILES (siehe sie in / usr / sbin / apache2ctl) auf einen Wert gesetzt haben, der über dem Grenzwert in diesen Dateien liegt.
HUB

Antworten:


16

Dies könnte helfen: - http://ubuntuforums.org/showthread.php?p=11950245#post11950245

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

Danke, das habe ich schon gesehen, aber es hilft nicht. Mit sudo oder nicht ändert sich nichts, ich habe den gleichen Fehler.
Pascal Polleunus

1
Arbeitete für mich! Völlig vergessen sudo.
ThomasReggi

2
+1 Magie macht sudoimmer den Trick
Fahrrad

Schlimmste noch, ich Docker Setup haben , wo dies appering, auf meinem Computer zu Hause arbeitet, aber nicht auf dem Server .. in dem Behälter mit keinen Unterschied zwischen ihnen ... macht keinen Sinn für mich
Superheld

5

Das Problem stammt von / usr / sbin / apache2ctl (unter Debian). Hör zu:

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

Hier wird die Anzahl der geöffneten Dateien auf 8192 festgelegt. Oder versuchen Sie es und schlagen fehl, in Ihrem Fall.

Um zu vermeiden, dass dabei ein Fehler auftritt, passen Sie die Einstellungen Ihres Systems in der Datei /etc/security/limits.conf an, indem Sie die folgenden zwei Zeilen hinzufügen:

*               soft    nofile          8192
*               hard    nofile          8192

Ich habe es nicht auf mehr als nötig erhöht (8192), weil ich nicht weiß, was es sonst noch bewirken wird. Dies beseitigt jedoch die Warnung.

Ich bin mir nicht sicher, ob Sie Ihr System danach neu starten müssen, da die ulimits ein dynamisches Element enthalten, mit dem ich nicht vertraut bin. Sie können jedoch leicht genug testen, um herauszufinden, wie viele Dateien sich aktuell in ulimit befinden:

ulimit -n

Vielleicht möchten Sie lesen, wo ich es gefunden habe: stackoverflow - Einstellung ulimit


Wie würde ich das Gegenteil tun und das Apache-Limit reduzieren?
eri0o

Wenn Sie sehen, dass das Skript, das ich in der Antwort gepostet habe, direkt aus dem von Apache installierten Apache2CTL-Skript stammt, müssen Sie zu dieser Skriptdatei gehen und sie ändern, vorausgesetzt, Sie haben das Zugriffsrecht und gehen davon aus, dass Sie bereit sind, sie zu wiederholen die Aktion bei jedem Apache-Upgrade.
Adam

2

1.Überprüfen und ändern Sie den Wert von ulimit auf Ihrem Hostcomputer . Fügen Sie die Werte in die Datei / etc / profile ein, damit sie wirksam werden.

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

oder du kannst:

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

2.Starten Sie den Docker-Dienst neu und stellen Sie sicher, dass die Konfiguration wirksam wird.

sudo service docker restart

3.Testen Sie das ulimit im Behälter.

ulimit -n

Das ist mein Testergebnis!

Tipps: Vielleicht können Sie auch den folgenden Befehl ausführen (Voraussetzung: ulimit auf dem Host-Computer sollte größer als 8192 sein), aber ich bin gescheitert .

docker run --privileged -it -p xxxx:80 --ulimit data=8192 linode/lamp /bin/bash
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.