Ich habe einige Probleme mit meinem LAMP-Server. In letzter Zeit wurde alles sehr langsam, obwohl sich die Besucherzahl auf meinen Websites nicht allzu sehr geändert hat. Wenn ich einen top
Befehl ausführe , heißt es, dass der MySQL-Prozess 150-200% der CPU übernommen hat. Wie ist das möglich, ich dachte immer, dass 100% ein Maximum ist?
Ich verwende Ubuntu 9.04 Server Edition mit 1,5 GB RAM.
my.cnf
die Einstellungen:
key_buffer = 64M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover = BACKUP
max_connections = 200
table_cache = 512
table_definition_cache = 512
thread_concurrency = 2
read_buffer_size = 1M
sort_buffer_size = 4M
join_buffer_size = 1M
query_cache_limit = 1M # the maximum size of individual query results
query_cache_size = 128M
Hier ist die Ausgabe von MySQLTuner :
Der top
Befehl:
Was könnte die Ursache für dieses Problem sein? Kann ich Änderungen an meinem my.cnf
Server vornehmen, um zu verhindern, dass der Server hängt?
mysql
performance
cpu-usage
Temnovit
quelle
quelle
Sie haben einen Prozessor mit mehr als einem Kern oder mehrere Prozessoren. Wenn Sie zwei Kerne haben und ein Prozess 100% beider Kerne verwendet, wird oben 200% angezeigt.
Ebenso funktioniert dies wahrscheinlich wie beabsichtigt - nichts ist falsch an Ihrer Konfiguration. Wenn Sie aufgrund der von Ihnen veröffentlichten Informationen häufig hängen bleiben, sollten Sie Ihre Tabellen mit geeigneten Indizes versehen (oder Ihre Abfragen optimieren).
quelle
Führen Sie
top -H
diese Option aus , um alle laufenden Threads und nicht nur den gesamten Prozess anzuzeigen. Wenn Sie oben die1
Taste drücken, wird die CPU-Auslastung für die einzelnen CPUs / Kerne angezeigt.quelle
In MySQL arbeiten mehrere Prozesse (Threads) unabhängig voneinander. Einer ist beispielsweise für das Schreiben von Daten aus dem Speicher auf die Festplatte verantwortlich. Bei mehreren Kernen in der CPU (und / oder mehreren CPUs) funktioniert mehr als ein Thread, sodass mehr als 100% eines einzelnen Kerns ausgeführt werden können. Auf einer vereinfachenden Ebene werden möglicherweise 75% jedes der beiden Kerne ausgeführt was 150% ergibt.
quelle
Ich habe ein Problem festgestellt, das nicht mit der CPU zusammenhängt. Wenn Sie Apache und MySQL auf demselben Server verwenden, können Sie schlechte Bedingungen ( RAM ) erreichen, wenn Ihre Apache-Aktivität zunimmt.
MySQLTunner teilt Ihnen mit, dass Sie mit den 200 verfügbaren Verbindungen (Ihrer maximalen Verbindungseinstellung) den RAM füllen. Angenommen, Sie haben Apache auf 150 Prozesse beschränkt. Sie werden sicherlich nicht genug RAM haben, wenn MySQL und Apache versuchen, 150 Verbindungen zu verwenden (da auch Apache ein guter RAM-Esser ist).
Hier geht es also um RAM und Sie sind vielleicht noch nicht getroffen :-) Die obersten Befehle zeigen nur 15 Apache-Prozesse an (aber Sie sind im Lastdurchschnitt 3/6/16, was bedeutet, dass der Sturm vor 15 Minuten war und jetzt in ist Verlassen).
Über das CPU-Problem, um die gute Antwort von Shakalandy zu ergänzen , kann dies an einer einzigen Abfrage liegen. Es kann sich in einer großen Tabelle befinden oder viele Aufgaben erneut indizieren oder viele temporäre Dateien verwenden, ein Index fehlt (entfernt?) Usw. Die einzige Möglichkeit, dies zu erkennen, besteht darin, das langsame Abfrageprotokoll zu aktivieren (möglicherweise) mit einem hohen Thresold, wie 8s). Dann nutzen Sie die mysqlsla Tool , um diese Log für langsame Abfragen zu analysieren, und führen Sie einige auf den identifizierten Abfragen erklären.
quelle