PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mysql ! Ich weiss nicht mehr weiter !



colibri
19.05.04, 21:00
Hallo !

Ich bekomme in meinen Webseiten immer folgenden Fehler ! keine Verbindung möglich: Too many connections ! Kommt aber nicht immer !

Gut dachte ich , stellste den max_connections auf 500

Die Unterbrechungen kommen trotzdem weiterhin !

Hat einer einen Rat ?

Gruß Mario

himbeere
19.05.04, 21:20
Hallo

Wer macht den die vielen connections auf?

Thomas

colibri
19.05.04, 21:22
Ich weiss leider nicht wo ich das Kontrollieren kann ob es überhaupt daran liegt ! Ich hab Debian drauf !

supperlocalhost
19.05.04, 21:44
viel leicht mit
netstat -n


Ich weiss leider nicht wo ich das Kontrollieren kann ob es überhaupt daran liegt ! Ich hab Debian drauf !

Stanislaus
19.05.04, 21:52
Einfach als SQL Query "SHOW PROCESSLIST" absetzten und Du bekommst alle Verbindungen aufgelistet.

Bis neulich ...

colibri
20.05.04, 10:47
Es ist eine lange liste mit wo immer wieder am ende /var/run/mysql/mysql.sock steht ! Aber verstehen tu ich es nicht !

Ich kann Leider aus dem Putty nicht rauskopieren, sonst hätte ich sie mal hier anzeigen lassen .

netzmeister
20.05.04, 11:01
Hallo,

fast immer sind das fehlerhafte php-Scripte.

Viele Grüße

Eicke

colibri
20.05.04, 11:28
Hallo !

Aber wie finde ich dann das richtige ? Ich hab ein Größeres Projekt in der art wie Klamm.de

Gruß und Danke

Mario

netzmeister
20.05.04, 11:41
Hallo coilibri,

Deine Seite hängt ja :o auch.

Stoppe mal den Apachen und das mysql. Dann fährst Du zuerst den
mysql hoch. Danach den Apachen.

Auf eine Konsole lässt Du Dir die Serverlast anzeigen. Auf der anderen
das Log des Webservers.

Bei stark besuchten Seiten gleicht die Konfiguration von Apache/PHP/Mysql
einer kleinen Doktorarbeit. Hier muss man beobachten und sich gut auskennen.

Setze mal in der Apache Konfig
KeepAliveTimeout 15

Viele Grüße

Eicke

colibri
20.05.04, 11:54
Hallo Eicke ,

Ich habe jetzt auf verdacht erst mal das ganze Projekt gelöscht !
Werde dann die Grundsache neu hochfahren, im moment scheint dadurch ruhe zu sein.

Ich habe im moment nicht mehr wie 200 Besucher am Tag ! Ich denke das kann es noch nicht so sein.

Gruß Mario

netzmeister
20.05.04, 12:01
Hallo Mario,

da ist definitiv irgendwo der Wurm drin.
Bei der Userzahl sollte es keine Probleme geben.

Für mich das so aus, als ob die PHP-Scripte nicht sauber beendet
werden. So bleibt der Prozess offen. Daher gehen Dir die Verbindungen
zur Datenbank aus.

Viele Grüße

Eicke

Peredur
20.05.04, 12:07
Hi colibri,

dein Problem sind die PHP-Scripte.

Solange MySQL keine Signal zum Abbau der Verbindung bekommt, bleibt die Verbindung zur Datenbank offen; solange bis die DB neu gestartet wird.

Prüfe ob du überall die Funktion "mysql_close();" eingebunden hast, wenn nicht solltest du es nachholen, bei allen Skripten.
Falls du doch diese Funktion eingebunden hast, dann schreib mal welche MySQL Version du hast.

Und als zweiten schritt, würde ich dir den Tip von netzmeister zu herzen nehmen.

Gruß
Peredur :D

smog_at
20.05.04, 18:40
Hey, Du könntest mal probieren mysql_connect(...); durch mysql_pconnect(...); zu ersetzen. So erzeugt er nicht immer eine neue Verbindung, sondern nützt falls schon vorhanden diese Verbindung.

MfG smog_at

colibri
20.05.04, 20:35
Hallo und Danke für Eure Tips ! Das Problem kam aber auf einmal, und war vorher nie da gewesen !

Gruß Mario

johnpatcher
20.05.04, 20:50
ähm ich bin mir nicht ganz sicher, aber mysql_close(); kann man wenn man nur mysql_connect() nutzt wegglassen, denn dann wird am ende des scripts die verbindung automatisch geschlossen, oder nicht? mysql_close(); braucht man doch nur für mysql_pconnect(); oder wenn man "sauber" programmiert ;).
mysql_pconnect(); ist ja ein dauernde verbindung die expliziet geschlossen werden muss ...

zumindest habe ich das noch irgendwie im gedächtnis .. kan aber sein, dass ich mich irgendwie täusche, bin mir aber relativ sicher ...

schonmal ne andere apache version benutzt? oder schau mal nach apache test "servern", die dann eine bestimmte anzahl an verbindungen simulieren und dann die ausnutzung usw mitloggen ...


johnpatcher

colibri
20.05.04, 21:12
Hallo !

Wo kann ich das testen ? Es geht um www.micoins.de

Gruß Mario

johnpatcher
20.05.04, 21:14
es gibt verschiedene programme ...
ich hatte da mal nen bericht, mal schauen ob ich noch find ...
wenn ja werde ich die beiträge reinposten

johnpatcher

Peredur
21.05.04, 11:41
ähm ich bin mir nicht ganz sicher, aber mysql_close(); kann man wenn man nur mysql_connect() nutzt wegglassen, denn dann wird am ende des scripts die verbindung automatisch geschlossen, oder nicht?
johnpatcher
Ja, und du sagst es. SAUBER PROGRAMMIEREN :D




mysql_close(); braucht man doch nur für mysql_pconnect(); oder wenn man "sauber" programmiert ;).
johnpatcher
mysql_close(); hat keine Auswirkung auf mysql_pconnect(); siehe Link
http://de.php.net/manual/de/function.mysql-pconnect.php




mysql_pconnect(); ist ja ein dauernde verbindung die expliziet geschlossen werden muss ...
johnpatcher
Ja


Eine andere Frage an colibri.
Logfiles, wie währe es wenn du unter Apache (V-Host) und MySQL mal nachschaust was dort steht, bei solchen Problemen dürfte ja was drin stehen.

....
/var/log/apache oder /var/log/httpd (Je nach Linux Distribution)

/var/lib/mysql und hier sollte mysql.log existieren, ja nach dem wie man MySQL installiert hat
....

Gruß
Peredur :)

madnobody
21.05.04, 13:32
also da gibt es mehrere moeglichkeiten,
es kann auch sein das du ein problem in deiner mysql configuration hast.

du solltest das wait_timeout=10 setzen, damit die connections nach 10 sekunden nichts tun sterben.
das problem mit dem max_connections kannst du nicht damit erschlagen das du einfach mehr zulässt, das ist genau falsch, ich weiss nicht ob du mit innodb tabellen arbeitest aber wenn nicht, blockieren sich die query dann nur gegenseitig und du hast dann ein deadlock.
die maxconnections wuerde ich je nach rechner zwischen 50 und 200 setzen, wobei die 200 dann schon ne grosse kiste sein muss, so dual xeon mit scsi usw.

die sache mit dem mysql_close in php kannst du vergessen, auch wenn du das angibst wird die verbindung erst geschlossen wenn das script BEENDET ist, habe ich selbst getestet.

also am einfachsten findest du die seite mit den problem wenn du
alle andere user aussperrst un dann mal schaust welche seite besonders lange beim laden braucht..

klingt fuer mich als wenn du ein paar tabellen joinst aber die where bedingung nicht vollständig ist, das kommt öffter vor ;).

ansonsten kannst du auch vor jeden query einen kommentar setzen, den siehst du dann auch in der processliste.
*/ script name */ dann findest du eventuelle engpaesse schneller.

dann darf man by mysql nicht vergessen die tabellen zu indizieren, das muss allerdings sinnvoll gemacht werden.

du kannst auch deine querys testen indem du einfach ein explain drauf machst, da bokommst du dann angezeit welche keys benutzt werden.

so ich hoffe du findest was du suchst.

cu madnobody

johnpatcher
21.05.04, 13:41
mysql_close(); hat keine Auswirkung auf mysql_pconnect(); siehe Link
http://de.php.net/manual/de/function.mysql-pconnect.php


ist zwar kein phpforum, aber wie kann ich dann ne pconnect(); verbindung schließen?

vielen dank

johnpatcher

Peredur
21.05.04, 14:37
ist zwar kein phpforum, aber wie kann ich dann ne pconnect(); verbindung schließen?

vielen dank

johnpatcher

Das ist eine sehr gute frage, leider kann ich dir keine Antwort darauf geben.
Diese Frage wurde bereits im PHP-Forum gestellt, vor circa 2 Jahren.
http://www.phpforum.de/forum/showtopic.php?threadid=3207&highlight=mysql_pconnect()

Keine Antwort ist auch eine Antwort. :confused:

In der PHP-Dokumentation habe ich leider nichts gefunden.

Darum bleibe ich bei meinem alt bewährtem mysql_connet(); und mysql_close();

Gruss
Peredur :D

downtown
21.05.04, 18:44
Darum bleibe ich bei meinem alt bewährtem mysql_connet(); und mysql_close();

Gruss
Peredur :D
mysql_close() ist definitiv nicht nötig:

Die Verwendung von mysql_close() ist für gewöhnlich nicht notwendig, weil offene, nicht persistente Verbindungen automatisch mit Beendigung des PHP-Skripts geschlossen werden.
Quelle: http://ch.php.net/mysql_close

johnpatcher
21.05.04, 20:03
mysql_close() ist definitiv nicht nötig:
Quelle: http://ch.php.net/mysql_close

auch ich bin es gewohnt mit mysql_close(); den zeiger zu schließen, genauso wie dateizeiger usw ...

ist wohl ne sache der sauberkeit und gewohnheit, naja jedem das seine ;)

johnpatcher