Apache stürzt ab; „Zu viele offene Dateien im System“

Apache stürzt ab; „Zu viele offene Dateien im System“

Ich verwende Apache2 mit mpm_prefork auf einem MediaTemple (dv)-Server. An meiner Serverkonfiguration wurden in letzter Zeit keine wesentlichen Änderungen vorgenommen. httpd.conf ist derzeit wie folgt eingestellt:

MaxKeepAliveRequests 200
KeepAliveTimeout 15

<IfModule prefork.c>
    StartServers           10
    MinSpareServers        10
    MaxSpareServers        10
    MaxClients            200
    MaxRequestsPerChild   4000
</IfModule>

Kurz vor einem vollständigen Apache-Absturz erhalte ich jedoch die folgende Fehlermeldung:

[Thu Jun 04 18:30:24 2009] [warn-phpd] mmap cache can't open /var/www/vhosts/mydomain.com/httpdocs/filename.php - Too many open files in system (pid 19873)

Es nervt mich, diesen Server zu überwachen und ihn neu zu starten, wenn Apache abstürzt. Hilfe?

Antwort1

Ich schlage vor, Sie versuchen, eine Zeile wie diese hinzuzufügenulimit -n 16384zum Anfang der Datei /usw/Standard/Apache2und dann neu starten.

Siehe auchVerknüpfung.

Antwort2

von 'man proc':

/proc/sys/fs/datei-max Diese Datei definiert eine systemweite Begrenzung der Anzahl offener Dateien für alle Prozesse. (Siehe auch setrlimit(2), das von einem Prozess verwendet werden kann, um die prozessspezifische Begrenzung RLIMIT_NOFILE für die Anzahl der Dateien festzulegen, die er öffnen darf.) Wenn Sie viele Fehlermeldungen über zu wenige Datei-Handles erhalten, versuchen Sie, diesen Wert zu erhöhen:

          echo 100000 > /proc/sys/fs/file-max

          The  kernel constant NR_OPEN imposes an upper limit on the

Wert, der in file-max platziert werden kann.

          If you  increase  /proc/sys/fs/file-max,  be  sure  to 

Erhöhen Sie /proc/sys/fs/inode-max auf das 3- bis 4-fache des neuen Werts von /proc/sys/fs/file-max, sonst gehen Ihnen die Inodes aus.

   **/proc/sys/fs/file-nr**
          This (read-only)  file  gives  the  number  of  files 

derzeit geöffnet. Es enthält drei Zahlen: die Anzahl der zugewiesenen Dateihandles, die Anzahl der freien Dateihandles und die maximale Anzahl der Dateihandles. Der Kernel weist Dateihandles dynamisch zu, gibt sie aber nicht wieder frei. Wenn die Anzahl der zugewiesenen Dateien nahe am Maximum liegt, sollten Sie eine Erhöhung des Maximums in Betracht ziehen. Wenn die Anzahl der freien Dateihandles groß ist, haben Sie einen Spitzenwert bei der Nutzung von Dateihandles festgestellt und müssen das Maximum wahrscheinlich nicht erhöhen.

Es lohnt sich, die zweite Zahl zu überprüfen, um zu sehen, ob die erste Zahl die ist, die Sie erhöhen müssen. Wenn ja, können Sie sie in Ihrer /etc/sysctl.conf mit folgendem Wert festlegen:

fs.file-max=512000

Beachten Sie, dass hierdurch dieSystemLimit; das Limit pro Benutzer wird mit „ulimit“ festgelegt, mit dem Sie, wie Sie bereits angegeben haben, vertraut sind.

Antwort3

Überprüfen Sie lsof, um zu sehen, was tatsächlich los ist. Das Überschreiten eines unangemessen hohen Grenzwertes ist häufig auf ein Leck oder einen anderen Fehler zurückzuführen.

Antwort4

Versuchen Sie, "ulimit -n 8192" auszuführen, bevor Sie Apache starten. Es erreicht wahrscheinlich das maximale Limit für geöffnete Dateien.

verwandte Informationen