
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.