Der Apache2-Server reagiert nicht mehr

Der Apache2-Server reagiert nicht mehr

Ich suche nach Vorschlägen, wo ich tiefer graben kann.

Kurz gesagt, der Apache2-Server stellt 2-15 Stunden nach dem Start die Bearbeitung von Anfragen ein. Daher muss ich service apache2 restartjeweils einen halben Tag lang arbeiten.

Lange Version:

  1. Ich betreibe einige Websites (Apache 2.2.22, erstellt am 12. Juli 2013) von einem dedizierten Server (Ubuntu 13.04).
  2. Der Apache2-Server funktionierte über ein halbes Jahr lang einwandfrei. Jetzt verarbeitet er plötzlich keine Anfragen mehr an alle Websites (es sind ungefähr 5 Sites), bis der Apache-Prozess neu gestartet wird.
  3. Ich konnte in /var/log/apache keine abnormalen Protokolle bezüglich des Problems finden.
  4. service apache2 statusmeldet, dass der Prozess läuft

Ich freue mich über Ihre Vorschläge und darüber, was ich in meiner Situation tun soll.

AKTUALISIEREN:

Läuft netstat -an | grep 80:

tcp6       0      0 :::80                   :::*                    LISTEN
tcp6     325      0 SERV_IP:80       IP_A:35514     CLOSE_WAIT
tcp6     332      0 SERV_IP:80       IP_B:34198     CLOSE_WAIT
tcp6     379      0 SERV_IP:80       IP_C:57859     CLOSE_WAIT
tcp6       0      0 SERV_IP:80       IP_A:35060     CLOSE_WAIT
tcp6     360      0 SERV_IP:80       IP_A:38481     CLOSE_WAIT
tcp6     466      0 SERV_IP:80       IP_B:56324     CLOSE_WAIT
tcp6     361      0 SERV_IP:80       IP_A:53466     CLOSE_WAIT
tcp6       1      0 SERV_IP:80       IP_A:38102     CLOSE_WAIT
tcp6     196      0 SERV_IP:80       IP_E:58125     ESTABLISHED

und weitere Einträge wie diese, etwa 150 an der Zahl.

ps aux | grep apache:

root      2968  0.0  0.0 452240 21116 ?        Ss   16:08   0:01 /usr/sbin/apache2 -k start
www-data  5217  0.0  0.0 463584 23820 ?        S    17:04   0:03 /usr/sbin/apache2 -k start

Von den späteren Zeilen (www-data) gibt es rund 120, also gehe ich von 120 Apache-Prozessen aus?

Verwendung strafeim Apache2-Root-Prozess:

 sudo strace -f -p 2968
Process 2968 attached - interrupt to quit
select(0, NULL, NULL, NULL, {0, 264394}) = 0 (Timeout)
wait4(-1, 0x7fff6d157a6c, WNOHANG|WSTOPPED, NULL) = 0
select(0, NULL, NULL, NULL, {1, 0})     = 0 (Timeout)
wait4(-1, 0x7fff6d157a6c, WNOHANG|WSTOPPED, NULL) = 0

Verwendung in einem der WWW-Datenprozesse:

sudo strace -f -p 8554
Process 8554 attached - interrupt to quit
flock(40, LOCK_EX

Whoa, für mich sieht es so aus, als ob Apache-Prozesse irgendwie hängen bleiben und sobald das maximale Verbindungslimit überschritten ist, werden keine neuen Instanzen mehr erstellt. Aber warum bleiben sie hängen?

htop, iotop, jnettop melden keine Anomalien. (keine Überlastung)

UPDATE2: Der Server stürzt seit zwei Tagen nicht mehr ab. Daher kann ich keine weiteren Informationen erhalten. Stattdessen bin ich für Ihre Hilfe dankbar und akzeptiere die Antwort. Sobald weitere Informationen verfügbar sind, werde ich einen Link zu einer neuen Frage mit einem besser strukturierten Text hinterlassen. Danke

Antwort1

Unabhängig davon, was „Service Apache2 Status“ meldet, sehen Sie Apache-Prozesse, wenn Sie „ps aux“ ausführen?

Können Sie ein netstat -n ausführen, wenn das Problem auftritt? Vielleicht gehen Ihnen Ressourcen aus, z. B. Dateideskriptoren, oder Sie haben zu viele offene Verbindungen.

Haben Sie während des Problems eine hohe CPU-Auslastung? Vielleicht hat das System nicht genug Speicher und stürzt ab?

Der HTTP-Server antwortet mit „Verbindung abgelehnt“ oder läuft die Verbindung einfach ab?

Im letzteren Fall würde ich vorschlagen, strace -f -p [apachepid] auszuführen. So finden Sie möglicherweise heraus, welcher Systemaufruf die Anfrage blockiert. Im ersteren Fall ist Apache wahrscheinlich abgestürzt.

Verwenden Sie einen Proxy für Tomcat oder einen anderen Anwendungsserver oder stellen Sie einfaches statisches HTML bereit?

Haben Sie die Authentifizierung konfiguriert? Vielleicht läuft etwas in der Authentifizierungsebene schief.

AKTUALISIEREN:

Im zweiten Strace sehe ich dieses Flock(40,LOCK_EX. Vielleicht versuchen die Prozesse, irgendwo eine exklusive Sperre zu erhalten? Können Sie lsof -n -p 8554 (oder welche PID auch immer versucht, zu flocken) ausführen und sehen, welche Datei es zu sperren versucht (40 ist der Dateideskriptor). Sie könnten auch „ls /proc/8554/fd“ ausführen.

verwandte Informationen