Ich habe einen Webserver, auf dem einige Dienste wie , und einige Apps laufen . Apache
In Zeiten mit hohem Datenverkehr scheint mein Server die hohe Belastung nicht zu bewältigen. Wenn dies auftritt, erhalte ich häufig die folgende Meldung von , wenn ich versuche, auf eine Seite zuzugreifen :Mysql
Redis
NodeJS
mysql
Warning: mysqli_connect(): (HY000/2003): Can't connect to MySQL server on '127.0.0.1' (99)
Diese Meldung erscheint in unregelmäßigen Abständen, so dass sie meistens nicht mehr erscheint, wenn ich die Seite aktualisiere. Außerdem glaube ich nicht, dass dies ein Problem mit meiner Konfiguration für MySQL ist, da ich ständig das folgende Ergebnis von mysqltuner.pl erhalte:
[OK] Highest usage of available connections: 74% (336/450)
Ebenso zeigt der Redis-Server eine Problemmeldung bei der Verbindung zum Server an:
Could not connect to Redis at 127.0.0.1:6379
Ich überwache meinen Server während dieser Zeit und habe herausgefunden, dass ungefähr 2 GB RAM (ohne ein einziges Byte SWAP für den Prozess von Mysql, Redis oder NodeJS zu verwenden) ausreichen. Nachdem ich einige Zeit mit Recherchen verbracht hatte (ohne einen Norden zu finden), las ich etwas über temporäre Ports. Also versuchte ich, den net.ipv4.ip_local_port_range
Parameter anzupassen, um meinen Portbereich zu vergrößern (Anpassung von 32768 61000
auf 10000 65000
). Die Ergebnisse waren schrecklich! Mein Webserver erhöht seine Reaktionszeit von durchschnittlich 180–200 ms auf ungefähr 6000 ms und die durchschnittliche Auslastung des Servers erhöht sich ebenfalls erheblich (aber die Fehlermeldungen verschwinden!).
Meine NodeJS-Apps (alle) verwenden Socket.io und antworten von einem anderen Port auf meinem Server. Ich versuche herauszufinden, was die Lösung für das Problem ist. Ist das ein Problem mit der Portverfügbarkeit? Warum verlangsamt die Anpassung des Parameters net.ipv4.ip_local_port_range den Server?
Serverkonfiguration:
- Ubuntu Server x64
- Intel Xeon E5520 Quad-Core
- 8 GB RAM
- 2x 1000 GB SATA 2,5" 5.400 U/min (RAID 1)
- 2x 60 GB SSD 2,5" (RAID1) (Datenbankkram kommt hier voll rein)
Antwort1
Wenn Ihre Frage lautet, wie Sie Ihren Server am besten während Spitzenzeiten überwachen (was in Spitzenzeiten schwierig ist), würde ich nach einem einfachen Tool suchen, das bei der Überwachung hilft. Top, ps und dfschneide es nicht immer.
Ich habe verwendetgesammeltum Datenpunkte auf meinen Partitionen, im Speicher, auf CPUs, Apache, MySQL und anderen Dingen zu erfassen. Es erfasst die Daten und speichert diese Datenpunkte. Dann benötigen Sie ein anderes Tool, um die Daten abzurufen - zum Beispieleinige Web-Frontends zur Anzeige der Daten.
Zur Fehlerbehebung benötigen Sie dann möglicherweise ein Tool, das Ihren Server angreift und ein Szenario mit hoher Auslastung erstellt. Apache Benchmark (ab) oder Siege sind hierfür gute Tools.