Vor kurzem war meine Server-CPU sehr hoch.
Die durchschnittliche CPU-Auslastung beträgt 13,91 (1 Minute) 11,72 (5 Minuten) 8,01 (15 Minuten), und auf meiner Website ist der Datenverkehr nur geringfügig gestiegen.
Nachdem ich einen Top-Befehl ausgeführt hatte, sah ich, dass MySQL 160% CPU verwendete!
Vor kurzem habe ich Tabellen optimiert und auf dauerhafte Verbindungen umgestellt. Könnte dies dazu führen, dass MySQL viel CPU verbraucht?
Antworten:
Zuerst würde ich sagen, dass Sie wahrscheinlich dauerhafte Verbindungen deaktivieren möchten, da diese fast immer mehr schaden als nützen.
Zweitens würde ich sagen, dass Sie Ihre MySQL-Benutzer überprüfen möchten, um sicherzustellen, dass niemand von einem Remote-Server aus eine Verbindung herstellen kann. Dies ist auch eine wichtige Sicherheitsmaßnahme.
Drittens würde ich sagen, dass Sie das MySQL Slow Query Log aktivieren möchten, um alle Abfragen im Auge zu behalten, die lange dauern, und damit sicherstellen, dass keine Abfragen Schlüsseltabellen zu lange blockieren.
Einige andere Dinge, die Sie überprüfen können, sind, die folgende Abfrage auszuführen, während die CPU-Auslastung hoch ist:
Dies zeigt Ihnen alle Abfragen, die gerade ausgeführt werden oder sich in der auszuführenden Warteschlange befinden, was die Abfrage ist und was sie tut (dieser Befehl schneidet die Abfrage ab, wenn sie zu lang ist. Sie können SHOW FULL PROCESSLIST verwenden, um den vollständigen Abfragetext anzuzeigen.) .
Sie wollen auch ein Auge auf Dinge wie Ihre Puffergrößen, halten Tabellen - Cache , Abfrage - Cache und innodb_buffer_pool_size als alle diese Speicherzuordnungen (wenn Sie InnoDB - Tabellen verwenden) kann eine auf die Abfrageleistung auswirken , welche MySQL dazu führen können , CPU auffressen.
Sie sollten wahrscheinlich auch die folgenden Informationen lesen, da sie einige gute Informationen enthalten.
Es ist auch eine sehr gute Idee, einen Profiler zu verwenden. Etwas, das Sie aktivieren können, wenn Sie möchten, zeigt Ihnen, welche Abfragen Ihre Anwendung ausführt, ob es doppelte Abfragen gibt, wie lange sie dauern usw. usw. Ein Beispiel für so etwas ist eines, an dem ich gearbeitet habe PHP Profiler, aber es gibt viele da draußen. Wenn Sie eine Software wie Drupal, Joomla oder Wordpress verwenden, sollten Sie sich in der Community erkundigen, da wahrscheinlich Module für diese verfügbar sind, mit denen Sie diese Informationen abrufen können, ohne etwas manuell integrieren zu müssen.
quelle
Da dies der Top-Beitrag ist, wenn Sie nach einer hohen CPU-Auslastung oder -Last von MySQL suchen, füge ich eine zusätzliche Antwort hinzu:
Am 1. Juli 2012 wurde der aktuellen UTC-Zeit eine Schaltsekunde hinzugefügt, um die verlangsamte Erdrotation aufgrund der Gezeiten auszugleichen. Beim Ausführen von ntp (oder ntpd) wurde diese Sekunde zur Uhr Ihres Computers / Servers hinzugefügt. MySQLd scheint diese zusätzliche Sekunde auf einigen Betriebssystemen nicht zu mögen und führt zu einer hohen CPU-Auslastung. Die schnelle Lösung ist (als root):
quelle
date
" && service ntp start Die MySQL-CPU-Auslastung ging sofort von 50 - 100% auf 0 - 1% zurücksudo service ntpd stop
diese Konfiguration.Wenn dieser Server für die Außenwelt sichtbar ist, sollten Sie überprüfen, ob er viele Anfragen zur Verbindung von der Außenwelt hat (dh Leute, die versuchen, in ihn einzudringen).
quelle