Php/MySQL "max user connection" Was tun?
-
Hallo zusammen,
ich bekomme zur Zeit öfters den "max user connection" Fehler auf meiner HP.
Erhöhen des Limit ist vom Hoster her nicht möglich.Der Fehler tritt auf, seitdem ich wegen Script basierten Downloadattacken (bis zu 500GB pro Tag) auf meinen Webspace eine Downloadkontrolle per PHP eingeführt habe.
Das Skript stellt eine Verbindung zur Datenbank her und prüft, wie viele Downloads von dieser IP bisher kamen und wickelt den Download ab. Somit hat der User keinen Direktlink mehr sondern bezieht seine Daten von dem PHP Script.
0-15 Download mit maximaler Geschwindigkeit
15-20 Limit auf 50KB20 Fehlermeldung.
Ich vermute einmal, dass die MySQL Verbindung somit während dem gesamten Downloadvorgang offen bleibt und deshalb das Limit erreicht wird.
Liege ich damit richtig?In diesem Fall müsste ein einfaches mysql_close() doch ausreichen oder?
Rai
-
Probier es doch einfach aus
Normalerweise erstellt der Apache Fork-Prozesse, die wiederrum bei jedem Aufruf der Seite eine Verbindung zur Datenbank erstellen?!
Wenn nun 10000 Leute auf die Seite gehen, sind 10000 Verbindungen offen, sofern diese nicht geschlossen wurden.
//edit
normalerweise sollte man nach jedem vollständigen Abruf der Daten, die MySQL-Verbindung schließen...Ich würde einfach eine IP-Prüfung machen und sofern die IP ausgesperrt werden soll einfach auf eine andere Seite weiterleiten(z.B. google) und alles sauber schließen...
-
Hi,
poste doch bitte einmal das Script. Vielleicht ist da ein ganz anderer Hase im Pfeffer.
Bitte auch die die Errorlogs des Servers mitschicken.
-
Hi,
danke für eure Antworten. Ich habe mich inzwischen mal tiefer eingelesen hier die Ergebnisse:
Normalerweise wird mysql_Close() nicht benötigt, da die Verbindung nach Ablauf des Scrips sofort geschlossen wird.ABER: Da ich über das Script Downloads mit bis zu 50MB steuere bleibt die Verbindung je nach Geschwindigkeit der Gegenseite durchaus länger offen - dann ist das 15er Limit natürlich ganz schnell erreicht.
Ich habe nach der DB-IP Abfrage jetzt ein mysql_close() drin und keinerlei Probleme mehr.
Rai