
Wir hosten unseren Webdienst auf einem dedizierten Server. Während Zeiten hoher Auslastung gibt der Server sehr häufig einen Timeout-Fehler statt einer Seite zurück. Wir haben täglich etwa 170.000 Anfragen. Der Server hat jedoch viel freien Speicher und die CPU ist im Moment nicht ausgelastet.
Ich kann nicht verstehen, warum der Server schlecht funktioniert.
Ich habe den Problemfall mit dem Dienstprogramm tcpdump profiliert. Dies sind die guten und schlechten Sitzungen, die von tcpdump verfolgt werden. Die Anfrage ist in beiden Experimenten dieselbe. Gut – Server gibt Antwort zurück. Schlecht – keine Antwort, Timeout-Fehler.
Können Sie anhand dieser Daten erkennen, warum das Problem auftritt? Wie kann ich weiter vorgehen, um der Fehlerquelle näher zu kommen?
Ich habe meine echte IP-Adresse durch 123.45.67.890 ersetzt
---- Bad ----
12:23:36.366292 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:39.362394 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:45.365567 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,nop,sackOK>
--------
---- Good ----
12:27:07.632229 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620946 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620969 IP myserver.superbservers.com.www > 123.45.67.890.63914: S 2654770980:2654770980(0) ack 3581365571 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 6>
12:27:10.838747 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 1 win 4380
12:27:10.957143 IP 123.45.67.890.63914 > myserver.superbservers.com.www: P 1:213(212) ack 1 win 4380
12:27:10.957152 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 213 win 108
12:27:10.965543 IP myserver.superbservers.com.www > 123.45.67.890.63914: P 1:630(629) ack 213 win 108
12:27:10.965621 IP myserver.superbservers.com.www > 123.45.67.890.63914: F 630:630(0) ack 213 win 108
12:27:11.183540 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 631 win 4222
12:27:11.185657 IP 123.45.67.890.63914 > myserver.superbservers.com.www: F 213:213(0) ack 631 win 4222
12:27:11.185663 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 214 win 108
--------
Details zum Service.
Dies ist ein Wetterberichtsdienst. Er ist in Perl geschrieben und wird von MySQL unterstützt. Das Skript verwendet mehrere Module (von CPAN und unsere eigenen).
Der Code ist relativ einfach. Das Skript lädt das Wetter von einem anderen Server herunter, konvertiert das Datenformat und gibt eine XML-Antwort zurück. Das Wetter wird in MyISAM DB zwischengespeichert. Es gibt eine weltweite Standortdatenbank (INNODB), die ebenfalls über das Skript abgefragt werden kann.
Dies sind die während der Hochlastzeit erfassten Messwerte.
Durchschnittlicher Datenverkehr: 2,5 MBit/s
Durchschnittliche Paketanzahl: 3300 Pakete/Sek.
Hoster: SuperbHosting
Betriebssystem: Ubuntu
Serverparameter: E6300 CONROE 1,86 GHz 2 x 1 MB CACHE 1066 1 GB DDR2 667 MHz
Dies ist ein Link zur von uns verwendeten Apache-Konfigurationsdatei http://repkin5.snow.prohosting.com/apache.txt
Dies ist der Serverstatusbericht zum Zeitpunkt der Hochlast http://repkin5.snow.prohosting.com/server-status.htm Es werden nur 10 von 120 untergeordneten Servern ausgeführt, also genügend Platz für neue Anfragen.
Schnappschuss des Top-Programms während der Hochlastzeit.
------
top - 13:21:29 up 15 days, 18:36, 1 user, load average: 0.18, 0.19, 0.21
Tasks: 137 total, 1 running, 136 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.8%us, 1.2%sy, 0.0%ni, 92.8%id, 0.7%wa, 0.0%hi, 3.5%si, 0.0%st
Mem: 1033904k total, 590620k used, 443284k free, 6892k buffers
Swap: 3028212k total, 82556k used, 2945656k free, 64156k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4252 mysql 20 0 162m 48m 3352 S 1 4.8 279:01.27 mysqld
14503 www-data 20 0 43280 14m 3824 S 1 1.4 0:00.16 apache2
14577 www-data 20 0 43012 13m 3500 S 1 1.4 0:00.06 apache2
14401 www-data 20 0 45076 17m 4340 S 0 1.8 0:00.46 apache2
14414 www-data 20 0 45516 18m 4344 S 0 1.8 0:00.47 apache2
14420 www-data 20 0 45624 18m 4372 S 0 1.8 0:00.61 apache2
14421 www-data 20 0 45488 18m 4352 S 0 1.8 0:00.42 apache2
14496 www-data 20 0 44820 17m 4328 S 0 1.7 0:00.18 apache2
14510 www-data 20 0 45216 17m 4300 S 0 1.8 0:00.62 apache2
1 root 20 0 2844 456 404 S 0 0.0 0:05.24 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
3 root RT -5 0 0 0 S 0 0.0 0:00.24 migration/0
4 root 15 -5 0 0 0 S 0 0.0 32:28.85 ksoftirqd/0
5 root RT -5 0 0 0 S 0 0.0 0:00.77 watchdog/0
6 root RT -5 0 0 0 S 0 0.0 0:00.15 migration/1
7 root 15 -5 0 0 0 S 0 0.0 0:03.07 ksoftirqd/1
8 root RT -5 0 0 0 S 0 0.0 0:00.63 watchdog/1
-----
Antwort1
Ihr MySQL-Server scheint aufgrund der hohen CPU-Auslastung zeitweise stark zu arbeiten (aber nicht in Ihrem Screenshot). Überprüfen Sie, welche Abfragen ausgeführt werden, indem Sie SHOW PROCCESSLIST;
in der MySQL-Eingabeaufforderung Folgendes eingeben.
Versuchen Sie auch, dieServer StatusSeite in Apache. Damit ExtendedStatus On
erhalten Sie Informationen darüber, welche Seiten zu diesem Zeitpunkt geladen werden, und Sie können sehen, wie viele offene „Slots“ Sie noch in Apache haben.
Der Standardwert in Apache mpm-prefork beträgt maximal 250 Prozesse, was bedeutet, dass Sie 250 gleichzeitige Dateidownloads verarbeiten können. Dies kann bei vielen Besuchern große Probleme verursachen, insbesondere wenn Sie KeepAlive
aktiviert haben. Sie werden auf Ihrer Serverstatusseite sehen, ob dies Ihr Problem ist.
Antwort2
Es gibt eine ganze Reihe von Gründen, warum Apache nicht reagiert. Als Ausgangspunkt würde ich mir den Serverstatus ansehen, vorausgesetzt, Sie habenmod_statusaktiviert und sehen Sie, wie viele Prozesse ausgeführt werden und ob sie beschäftigt zu sein scheinen oder nicht.Diese Seiteist ein guter erster Ort, um sich die Dinge anzusehen, die Sie versuchen könnten, wenn sich herausstellt, dass Sie Probleme mit untergeordneten Prozessen haben.
Antwort3
Der obere Screenshot zeigt, dass Ihr MySQL-Server überhaupt nicht hart arbeitet! (Tut mir leid, Emil – aber Sie müssen das sorgfältiger lesen oder mehr über top erfahren).
Und es sind nur 8 Apache-Prozesse aufgelistet.
Und die durchschnittliche Auslastung beträgt 0,2 bei 93 % CPU-Leerlauf – diese Maschine steht herum und tut nichts.
In dem geposteten Link fehlt die Hälfte der Konfiguration, aber es sieht so aus, als wäre sie bereits vorab geforkt.
Meine erste Vermutung ist, dass MaxServers auf einen verrückten Wert wie 10 eingestellt ist (je nachdem, wie Ihre Anwendung aussieht, sollte er im Bereich zwischen 100 und 200 liegen).
Sie möchten vielleicht auch nach dummen Sachen wie Reverse Lookups bei eingehenden Verbindungen oder installiertem Mod_ident suchen (OK, das sind keinestetsdumm - sollte aber mit äußerster Vorsicht verwendet werden).
Sicherlich wird die Installation von mod_status und die Aktivierung des erweiterten Status einen viel besseren Überblick darüber geben, was hier vor sich geht.
C.
Antwort4
Können Sie versuchen, den Server per Flood-Ping (ping -f) zu kontaktieren? Ich vermute, dass es ein Hardwareproblem mit der Netzwerkverbindung gibt, da Ihr Server die SYN-Pakete nicht schnell genug zu beantworten scheint.