Timeout der Apache-Verbindung, was könnte der Fehler sein?

Timeout der Apache-Verbindung, was könnte der Fehler sein?

Ich habe einen Apache-Server, der sehr instabil ist, und ich habe mehrmals am Tag Probleme, eine Verbindung zu Apache herzustellen. Ich kann nicht herausfinden, warum, da für mich alles in Ordnung zu sein scheint. Der Server hat jederzeit „reichlich“ freie Ressourcen. Der Server ist ein Linode 4098 mit 4 GB RAM, 48 GB HD und 2 CPUs.

Ich benutzemod_statusich möchte den Apache-Status prüfen, erhalte jedoch immer wieder Verbindungstimeout-Fehler, wenn ich versuche, auf die /Server-Status-Seite zuzugreifen.

Meine aktuelle Apache-Konfiguration

<IfModule mpm_prefork_module>
        StartServers            3
        ServerLimit             200
        MinSpareServers         3
        MaxSpareServers         5
        MaxRequestWorkers       175
        MaxConnectionsPerChild  100
        MaxRequestsPerChild     20
</IfModule>

Fast jede zweite Apache-Anfrage an /server-status schlägt mit ERR_CONNECTION_TIMED_OUT fehl.

Ich kann nicht verstehen, warum dies geschieht, da beim Überprüfen des Servers viele verfügbare Ressourcen und inaktive Verbindungen vorhanden sind.

Beispielsweise meldet /server-status viele verfügbare Verbindungen:

Parent Server Config. Generation: 1
Parent Server MPM Generation: 0
Server uptime: 1 hour 6 minutes 6 seconds
Server load: 0.09 0.15 0.14
Total accesses: 27206 - Total Traffic: 79.8 MB
CPU Usage: u3.92 s.77 cu0 cs0 - .118% CPU load
6.86 requests/sec - 20.6 kB/second - 3077 B/request
52 requests currently being processed, 1 idle workers

RRRCRRRRRRRRRRRRRRRRRRCRRC.RR.R.RRRRRRRRRCRRRRR_WCCRR.R..RR.....
................................................................
...............................................

Und mit der Betriebszeit sehe ich, dass die CPU auch verfügbar ist

load average: 0.05, 0.12, 0.14

und es ist Speicher verfügbar:

        total   used   free  shared  buff/cache   available  
> Mem:   3.9G    1.3G   413M     81M        2.1G        2.3G

Hat jemand eine Idee, was nicht richtig sein könnte?

UPDATE: Wie gewünscht finden Sie hier einen Ausschnitt aus dem Zugriffsprotokoll. (99 % davon sind Anfragen bezüglich der Verfolgung von Statistiken durch Aufrufen des Skript-Handlers /api2/counting/count)

4.139.128.194 - - [23/Jan/2017:11:38:36 +0000] "POST /api2/counter/count?r=1485171514298 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
176.38.149.76 - - [23/Jan/2017:11:38:36 +0000] "POST /api2/counter/count?r=1485171517077 HTTP/1.1" 200 454 "-" "WriteDiary4.72"
67.84.227.131 - - [23/Jan/2017:11:38:36 +0000] "GET /keepalive?471:1485171524866 HTTP/1.1" 200 469 "https://www.writediary.com/notes" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"
122.178.156.252 - - [23/Jan/2017:11:38:36 +0000] "POST /api2/counter/count?r=1485171515804 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
82.137.13.18 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171525558 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
103.199.35.221 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171515470 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
95.218.142.245 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171516264 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
47.31.143.106 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171515787 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
94.139.128.194 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171515619 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
120.188.33.198 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171515867 HTTP/1.1" 200 454 "-" "WriteDiary4.72"
47.29.174.163 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171515122 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
85.115.224.151 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171515453 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
47.11.219.147 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171516596 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
61.5.53.52 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171520665 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
116.102.205.20 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171516590 HTTP/1.1" 200 454 "-" "WriteDiary4.72"
101.60.31.133 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171516802 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
47.31.147.213 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171515431 HTTP/1.1" 200 5131 "-" "WriteDiary4.72"
186.78.73.222 - - [23/Jan/2017:11:38:37 +0000] "POST /api2/counter/count?r=1485171669305 HTTP/1.1" 200 454 "-" "WriteDiary4.72"
112.79.186.36 - - [23/Jan/2017:11:38:38 +0000] "POST /api2/counter/count?r=1485171736857 HTTP/1.1" 200 454 "-" "WriteDiary4.72"
94.139.128.194 - - [23/Jan/2017:11:38:38 +0000] "POST /api2/counter/count?r=1485171516605 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
24.236.88.161 - - [23/Jan/2017:11:38:38 +0000] "POST /api2/counter/count?r=1485171516752 HTTP/1.1" 200 441 "-" "WriteDiary4.72"
150.31.100.192 - - [23/Jan/2017:11:38:38 +0000] "POST /api2/counter/count?r=1485171517315 HTTP/1.1" 200 454 "-" "WriteDiary4.72"
12.181.196.67 - - [23/Jan/2017:11:38:38 +0000] "GET /keepalive?50412:1485171517975 HTTP/1.1" 200 501 "https://www.writediary.com/notes" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
112.198.75.139 - - [23/Jan/2017:11:38:38 +0000] "POST /api2/counter/count?r=1485171408169 HTTP/1.1" 200 4794 "-" "WriteDiary4.72"
114.125.201.114 - - [23/Jan/2017:11:38:38 +0000] "POST /api2/counter/count?r=1485172944904 HTTP/1.1" 200 441 "-" "WriteDiary4.72"

LÖSUNG: Ich musste den Server aktualisieren, um mehr Worker zuzulassen. Da jede Apache-Verbindung etwa 30 MB RAM benötigt, stieß der Server an seine Grenzen. 4 GB RAM ergeben = 4000 MB / 30 MB = maximal 133 Verbindungen ... und wenn ein Teil des Speichers MySQL und anderen Systemfunktionen zugewiesen wird, sind in der Praxis nur 3,5 GB verfügbar, was maximal fast 100 Verbindungen ergibt.

Beim Upgrade auf 8 GB RAM liegt das maximale Limit näher bei 250 Verbindungen, wodurch alles reibungslos läuft. Tatsächlich meldete der Serverstatus nach der RAM-Neuskalierung, dass Apache in Spitzenzeiten viele Stunden lang 200 Anfragen gleichzeitig verarbeitete. Das würde erklären, warum der Server in Spitzenzeiten mit einem Limit von fast 100 zu kämpfen hatte.

Antwort1

kannst du bitte das Apache-Zugriffsprotokoll posten

Sie können Protokolle finden, wenn Sie Ubuntu verwenden, indem Sie diesen Befehl verwenden

cat /var/log/apache2/access.log

aber es variiert je nach Plattform

verwandte Informationen