Zum Inhalt springen

Mysql hat hohe Auslastung


PHP-Freak

Empfohlene Beiträge

Hallo

ich hab ein kleines Problem.

Mysql hat auf meinem Server ca 60% Auslastung oder mehr.

Wenn ich mir die Prozessliste von Mysql anzeigen lasse sehe ich da ca. 40 Verbindungen im Modus "SLEEP", und sonst nichts.

Da frag ich mich warum hat MYSQL sone hohe Auslastung.

Ich hab da ein Script drauf laufen was mit einer Unendlichschleife läuft.

Wenn ich dieses ausmache, ist die Auslastung weg.

Aber eigentlich kann des auch nicht dadran liegen, da es in jeder Schleife "gebremst" wird. Hab in jeder Schleife ein "sleep(1)" drin, damit der nicht tausenden Mysqlqueries raus haut.

Link zu diesem Kommentar
Auf anderen Seiten teilen

definiere "dein server".

ist das eine linux- oder eine windowskiste?

in welchem modus läuft der server (bei windows z.b. der standard mysqld.exe oder der mysqld-max)?

welche storage engine verwendest du?

ist das ein geteilter server, auf den mehrere benutzer ausser dir den mysqld nutzen?

kannst du die betreffenden codezeilen posten, in welcher das sleep() ausgeführt wird?

wozu benötigst du eine endlosschleife, und kannst du deine aufgabe nicht ohne diese bewerkstelligen?

fragen über fragen, ich weiss :)

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also das ist mein eigener Root-Server bei 1 und 1.

Drauf laufen hab ich Fedora Core 4.

Warum das alles in einer Unedlichschleife sein muss?

Ganz einfach des ganze ist ein Proxychecker und des Script holt eine Proxy aus der Datenbank und öffnet einen weiteren Prozess zum prüfen der Proxy.

Aber ich merke grad auch wenn ich alle PHP-Scripte beende bleibt die Auslastung laut ps auf 55% erst wenn ich den Prozess neustarte sinkt sie.

Kann es vieleicht sein dass allein die 40 offenen Verbindungen diese Auslastung erzeugen?

Weil mir PHPMyAdmin ja auch nur Verbindungen im Sleep angezeigt hatte.

EDIT:

Soo hab noch mal was ausprobiert.

Des Script mit den Schleifen ist nicht dran Schuld.

Hab jetzt mal den Befehl mit dem die weiteren Prozesse gestartet werden auskommentiert.

Jetzt hat Mysql nur ne Auslastung von 7,7%.

Aber in den Scripten, die die eigentliche Aufgabe übernehmen die Proxies zu testen gibt es keine Schleifen. Nur normale Abfragen.

Es werden immer ca 30 Proxies gleichzeitig geprüft.

Also laufen 30 weitere Scripte.

Jedes Script hat so ca 50 Mysqlqueries drin.

Komisch ist auch, Mysql hatter vorher wo die Scripte noch über den Apache liefen ne normale Auslastung.

Jetzt starte ich sie direkt per PHP, um den Apache zu entlasten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

d.h. du machst eine query (oder mehrere queries) auf die DB, liest die DS aus, und verbindest dich mit den in den datensätzen stehenden proxies über TCP? und ja, vielleicht ist es ja nicht die mysql-query, die die auslastung verursacht, sondern der connect, wenngleich ein moderner server unter linux das leicht packen sollte. bitte erläutere mal näher, wie der connect vonstatten geht.

ich denke mal, die machst 30 TCP-verbindungen auf, und nochmals 30 neue, während die ersten 30 noch auf TCP_WAIT oder ESTABLISHES stehen. netstat ist hier dein freund, und vielleicht könntest du ja dessen output - in gekürzter fassung - hier reinposten.

warum top im vergleich zu ps eine grossere systemauslastung anzeigt, könnte daran liegen, dass top an sich auch cpu-ressourcen benötigt - besonders wenn die refreshrate höher gestellt ist ;)

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also sleep(1) nimmt Sekunden und usleep(1000) nimmt Mikrosekunden.

Also das Script macht folgendes:

1. Das Startscript wird gestartet (start.php)

Es holt die nächste Proxy aus der Datenbank und startet einen weiteren Prozess.

2. Das 2. Script (thread.php) öffnet eine Mysql-Verbindung und ruft weitere Parameter ab, da nur die Id der proxy in der Datenbank übergeben wird.

Dann wird eine Verbindung über die Proxy zu einem Proxyjudge aufgebaut.

Die mach ich mit CURL. Der Timeout liegt im moment bei 30 Sekunden.

Aber da ich Http und Https teste hat Mysql insgesammt 60 Sek nichts zu tun.

Dann wenn die Verbindung erfolgreich war oder nicht, wird versucht den abgerufenen Seiteninhalt auszuwerten (Anonymität, Gateway usw).

Am Schluss wird dann alles in die Datenbank geschrieben und der Thread endet.

Es laufen immer ca 30 Threads parallel.

Bei jedem Script mache ich ganz oben im Script eine Mysqlverbindung auf und ganz unten wieder zu.

Ich könnte ja mal das alles so umbauen, dass vor der Verbindung mit dem Proxy Mysql wieder geschlossen wird und danach wieder aufgemacht wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm ich versteh das nicht.

Jetzt hab ich nochn bisl dran rumgebautund jetzt schwankt die Auslastung zwischen 10 und 60%.

Kann das mit den Schwankungen auch damit zusammenhängen, dass an einigen Stellen 5 oder 10 Abfragen direkt hintereinander Folgen?

Ich glaub die Update Queries könnte ich noch zusammen fassen.

Hab für jeden Wert bisher eine Query genommen.

Wie kann ich des denn zusammenfassen?

So z.B.

mysql_query("update `test` set schlüssel1 = 'wert1' schlüssel2 = 'wert2'");

 Id  	 User  	 Host  	 db  	 Command  	 Time  	 State  	 Info
36 web2 localhost usr_web1_2 Sleep 1 NULL
98 admin localhost psa Sleep 224 NULL
200 proxychecker localhost proxychecker Sleep 1 NULL
208 adserver localhost adserver Sleep 125 NULL
209 adserver localhost adserver Sleep 377 NULL
296 proxychecker localhost proxychecker Sleep 1 NULL
444 adserver localhost adserver Sleep 126 NULL
453 proxychecker localhost proxychecker Sleep 115 NULL
454 proxychecker localhost proxychecker Sleep 113 NULL
456 proxychecker localhost proxychecker Sleep 112 NULL
458 proxychecker localhost proxychecker Sleep 110 NULL
460 proxychecker localhost proxychecker Sleep 106 NULL
461 proxychecker localhost proxychecker Sleep 105 NULL
463 proxychecker localhost proxychecker Sleep 102 NULL
467 proxychecker localhost proxychecker Sleep 98 NULL
470 proxychecker localhost proxychecker Sleep 94 NULL
480 proxychecker localhost proxychecker Sleep 89 NULL
483 proxychecker localhost proxychecker Sleep 86 NULL
484 proxychecker localhost proxychecker Sleep 86 NULL
489 proxychecker localhost proxychecker Sleep 81 NULL
492 proxychecker localhost proxychecker Sleep 78 NULL
498 proxychecker localhost proxychecker Sleep 72 NULL
501 proxychecker localhost proxychecker Sleep 68 NULL
502 proxychecker localhost proxychecker Sleep 67 NULL
503 proxychecker localhost proxychecker Sleep 67 NULL
504 proxychecker localhost proxychecker Sleep 64 NULL
507 proxychecker localhost proxychecker Sleep 60 NULL
512 proxychecker localhost proxychecker Sleep 56 NULL
513 proxychecker localhost proxychecker Sleep 55 NULL
514 proxychecker localhost proxychecker Sleep 52 NULL
518 proxychecker localhost proxychecker Sleep 48 NULL
519 proxychecker localhost proxychecker Sleep 46 NULL
520 proxychecker localhost proxychecker Sleep 42 NULL
522 proxychecker localhost proxychecker Sleep 41 NULL
526 proxychecker localhost proxychecker Sleep 38 NULL
527 proxychecker localhost proxychecker Sleep 38 NULL
528 proxychecker localhost proxychecker Sleep 34 NULL
534 proxychecker localhost proxychecker Sleep 30 NULL
537 proxychecker localhost proxychecker Sleep 28 NULL
538 proxychecker localhost proxychecker Sleep 26 NULL
546 proxychecker localhost proxychecker Sleep 22 NULL
547 proxychecker localhost proxychecker Sleep 22 NULL
553 proxychecker localhost proxychecker Sleep 20 NULL
555 proxychecker localhost proxychecker Sleep 19 NULL
556 proxychecker localhost proxychecker Sleep 17 NULL
569 proxychecker localhost proxychecker Sleep 8 NULL
575 proxychecker localhost proxychecker Sleep 6 NULL
580 proxychecker localhost proxychecker Sleep 5 NULL
584 admin localhost psa Query 1 Writing to net update sessions set click_time=NOW() where sess_id...
585 proxychecker localhost proxychecker Sleep 1 NULL
586 pma_8tblF9FXhl1K localhost NULL Sleep 1 NULL
587 admin localhost NULL Query 0 NULL SHOW PROCESSLIST
[/PHP]

Des ist jetzt mal die Ausgabe aller aktiven Prozesse in Mysql.

Wie man sieht alles nur auf SLEEP.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...