Ich habe meinen Apache-Server wie folgt mit Worker MPM konfiguriert:
<IfModule mpm_worker_module>
ServerLimit 20
ThreadLimit 50
StartServers 3
MaxClients 1000
MinSpareThreads 50
MaxSpareThreads 200
ThreadsPerChild 50
MaxRequestsPerChild 10000
</IfModule>
Der Server nimmt täglich etwa 2 Millionen Anfragen entgegen. Wenn die Anforderungen eingehen, akzeptiert der Apache-Server keine neue Verbindung mehr (Browser kann keine Verbindung herstellen). Und der Prozess bleibt in der Prozessliste. Die Speichernutzung beträgt ca. 10% und die CPU 0%. Es scheint, dass der Apache-Server die Prozesse nicht zum richtigen Zeitpunkt recyceln konnte.
Ich habe in Fehlerprotokollen etwas im Zusammenhang mit dem Absturz gefunden:
[Mon Aug 15 12:36:24 2011] [error] child process 11444 still did not exit, sending a SIGKILL
[Mon Aug 15 12:36:24 2011] [error] child process 12090 still did not exit, sending a SIGKILL
[Mon Aug 15 12:36:24 2011] [error] child process 10698 still did not exit, sending a SIGKILL
[Mon Aug 15 12:36:24 2011] [error] child process 12144 still did not exit, sending a SIGKILL
[Mon Aug 15 12:36:24 2011] [error] child process 12032 still did not exit, sending a SIGKILL
[Mon Aug 15 12:36:24 2011] [error] child process 10699 still did not exit, sending a SIGKILL
[Mon Aug 15 12:36:25 2011] [notice] caught SIGTERM, shutting down
[Mon Aug 15 12:37:31 2011] [notice] mod_python: Creating 8 session mutexes based on 20 max processes and 50 max threads.
[Mon Aug 15 12:37:31 2011] [notice] mod_python: using mutex_directory /tmp
[Mon Aug 15 12:37:31 2011] [notice] Apache/2.2.17 (Ubuntu) mod_python/3.3.1 Python/2.7.1+ mod_ssl/2.2.17 OpenSSL/0.9.8o configured -- resuming normal operations
[Mon Aug 15 15:36:46 2011] [error] server is within MinSpareThreads of MaxClients, consider raising the MaxClients setting
[Mon Aug 15 15:38:48 2011] [error] server reached MaxClients setting, consider raising the MaxClients setting
[Mon Aug 15 16:17:31 2011] [warn] child process 766 still did not exit, sending a SIGTERM
[Mon Aug 15 16:17:31 2011] [warn] child process 767 still did not exit, sending a SIGTERM
Irgendwelche Ideen? Vielen Dank!
Antworten:
Möglicherweise möchten Sie Ihren Serverstatus mit mod_status überprüfen. Möglicherweise haben Sie Verbindungen, die nicht getrennt werden und in einem Status "Antwort senden" (W) stecken bleiben. In diesem Artikel erfahren Sie, wie Sie diesen Bericht zum Lösen von httpd maxclients und modstatus diagnostizieren
quelle