PHP-Freak Geschrieben 19. Dezember 2006 Teilen Geschrieben 19. Dezember 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 19. Dezember 2006 Teilen Geschrieben 19. Dezember 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
PHP-Freak Geschrieben 19. Dezember 2006 Autor Teilen Geschrieben 19. Dezember 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
PHP-Freak Geschrieben 19. Dezember 2006 Autor Teilen Geschrieben 19. Dezember 2006 Was mir gerade auffällt ist, dass sich die angaben von "ps auxwf" und "top" unterscheiden. Bei "ps auxwf" sagt er mir 22,5% Auslastung und unter "top" 93.8%. Wie kann das sein? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 19. Dezember 2006 Teilen Geschrieben 19. Dezember 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigredeyes Geschrieben 20. Dezember 2006 Teilen Geschrieben 20. Dezember 2006 "sleep(1)" ... kein plan von mysql, aber nimmt die funktion sekunden oder millisekunden als parameter? dann mal lieber sleep(1000) . bigredeyes Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
PHP-Freak Geschrieben 20. Dezember 2006 Autor Teilen Geschrieben 20. Dezember 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
PHP-Freak Geschrieben 20. Dezember 2006 Autor Teilen Geschrieben 20. Dezember 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.