
Ich habe ein Problem mit der durchschnittlichen Auslastung meiner dedizierten Debian GNU/Linux-Boxen. Auf beiden (2 davon) läuft MySQL + eine benutzerdefinierte Spieleserver-Software – ein eher kleines „MMORPG“ (überhaupt nicht riesig). Die CPU- und Speicherauslastung ist in Ordnung. Die CPU-Auslastung liegt normalerweise unter 5 %. Die RAM-Auslastung steigt auf etwa 80 – 90 %, aber es ist immer noch eine Menge frei, zwischengespeichert oder gepuffert. Die Swap-Auslastung liegt bei 0.
Während ich die Auslastung mit uptime, top oder einem anderen Befehl, der sie anzeigt, überwache, springt sie zufällig auf etwa 4 oder sogar mehr. Das ist offensichtlich ein Problem, insbesondere wenn man bedenkt, dass beide Boxen „nur“ 2 Kerne haben. Nach dem magischen Sprung der durchschnittlichen Auslastung beginnt sie gleichmäßig zu sinken, was darauf hindeutet, dass es sich um einen wirklich vorübergehenden Sprung in der Ressourcennutzung handelte. Die CPU-Auslastung liegt immer bei 0–5 %, maximal 10 %, wann immer ich es geschafft habe, etwa 15 Minuten lang mit einer Aktualisierungsfrequenz von 1 Sekunde auf top zu starren.
Ich habe einige Tools wie htop, vmstat, dstat usw. ohne Erfolg ausprobiert. Hier ist ein Protokoll für alle, die interessiert sind:
http://www.k-zodron.com/log.txt
Abgesehen von dem Auftreten in den Anfangszeilen steigt die CPU-Auslastung kaum an, während die Belastung auf astronomische Werte springt. Ich bin kein Superexperte auf diesem Gebiet, aber das Schreiben von 4 KB auf eine Festplatte klingt auch nicht so, als ob es ein I/O-Engpass sein könnte.
Ich habe auch das MySQL Tuning Primer Tool ausgeführt und es meldet, dass alles in Ordnung ist.
Irgendwelche Ideen, wie man das Problem aufspüren und lösen kann? Danke!
Bearbeiten
http://www.k-zodron.com/munin/
Munin-Statistiken, Aktualisierung etwa alle 5 – 10 Minuten.
Antwort1
kann es sein, dass MySQL temporäre Tabellen verwendet? können Sie mit IO stat einige Munin-Diagramme hinzufügen? Die IO-Zahlen im bereitgestellten Protokoll scheinen unglaublich niedrig.
Was ist Ihr Arbeitssatz – passen die Daten bequem in den Speicher [scheint so]? Führen Sie von Zeit zu Zeit viele Schreibvorgänge in SQL durch [aus dem Protokoll, wie es scheint – überhaupt keine]?
ist es möglich, dass die Anzahl gleichzeitiger Anfragen [SQL oder an Ihren benutzerdefinierten Server] plötzlich sprunghaft ansteigt? Was sagt cat /proc/net/ip_conntrack|wc -l? Was wird bei Lastspitzen angezeigt?
kannst du MySQL einschaltenProtokollierung langsamer Abfragen- zB alles > 1 oder 2 Sek.?
sind Ihre Festplatten direkt an den Server angeschlossen oder ist es vielleicht iscsi/nfs? Können Sie den Integritätsstatus der Festplatten [Smart]/RAID-Status überprüfen? Vielleicht ist eine der Festplatten defekt … oder Sie können außerhalb der Spitzenzeiten einen einfachen E/A-Festplatten-Benchmark ausführen, um sicherzustellen, dass Sie angemessene Lese-/Schreibgeschwindigkeiten erreichen.
oder wird vielleicht etwas Hässliches in dmesg angezeigt?
Bearbeiten: Überprüfen Sie, ob netstat |wc -l mit der Auslastung korreliert
Überprüfen Sie, ob ps axms|wc -l mit der Last korreliert
Überprüfen Sie, ob lsof |wc -l mit der Last korreliert
[am besten kleine Munin-Plugins dafür hacken, um sie in die Charts zu bringen].
Antwort2
Sie benötigen mehr Messwerte. Ich verwende Ganglia, um verschiedene Werte zu erfassen, die klassischen: CPU, Speicher, Netzwerk, Festplatten-E/A usw.; dienstbasierte Messwerte: HTTP-Anfragen, MySQL-Abfragen und langsame Abfragen usw.; und anwendungsbasierte Messwerte, d. h. wie viele Benutzer mit dem Spiel verbunden sind oder wie oft die App eine kritische Funktion aufruft.
Durch die Analyse dieser Informationen und den Vergleich mit den Lastspitzen können Sie sich ein besseres Bild davon machen, was in Ihrem System passiert.