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 restart
jeweils einen halben Tag lang arbeiten.
Lange Version:
- Ich betreibe einige Websites (Apache 2.2.22, erstellt am 12. Juli 2013) von einem dedizierten Server (Ubuntu 13.04).
- 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.
- Ich konnte in /var/log/apache keine abnormalen Protokolle bezüglich des Problems finden.
service apache2 status
meldet, 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 strafe
im 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.