zu viele apache - / mysql - sleeping prozesse

jPdev.de

Registered User
Hallo,

seit geraumer Zeit habe ich das Problem, dass mein apache2 zu viele sleeping Prozesse hält und damit schnell die MaxClients erreicht. Ich habe schon einiges versucht aber bisher mit ernüchternem Erfolg.

Es handelt sich um ein Browsergame mit zwischen 100 - 250 gleichzeitigen Usern.

System:
Apache/2.0.53
Suse 9.?

Inzwischen habe ich folgendes versucht:

1)

ServerLimit 1024
MaxClients 1024

Diese Werte haben nichts gebracht und sind historisch auf diese Höhe angewachsen, um das "Stehenbleiben" des apache2 hinauszuzögern.

2)

KeepAlive Off
MaxKeelAliveRequests 100 (zieht dieser Wert überhaupt, wenn KeepAlive Off ist ???)
KeepAliveTimeout 10 (zieht dieser Wert überhaupt, wenn KeepAlive Off ist ???)

Diese Einstellungen haben das Problem leider nicht behoben? Vielleicht hielt der Server so länger durch. Kann ich nicht genau sagen. Sollte ich hier noch etwas ändern.

3)

Dann viel mir auf, dass mit den steigenden apache2 sleep Prozessen auch die mysql Prozesse stiegen, die mit der Zeit ebenfalls sleep Werte jenseits der 1000 Sekunden hatten.

Meine nächste Idee war das Timeout der mysql Prozesse zu reduzieren, in der Hoffnung, das mysql die httpd2 Prozesse mit herunter reißt.

max connections 1500
inactive_timeout 60
wait timeout 60

Auch dies brachte nichts. Nur wenn die httpd2 Prozesse gekillt werden, werden die mysql Prozesse mit beendet.

4)

Parallel habe ich in allen Skripten ein freigeben aller Variablen und mysql Ressourcen und ein mysql_close eingebaut. Das brachte nur einen Tick mehr Speicher aber keine Lösung meines Problems.

5)

Was bewirkt eigentlich die Variable MaxRequestsPerChild 0? Kann mir das helfen?
Hab den Wert jetzt mal auf 10 gesetzt. Die Prozesse steigen jetzt auch kontinuierlich. Jetzt sehe ich in TOP mehr running Prozesse als vorher und auch sehr oft <defunct> Prozesse.
Ist das eine mögliche Lösung? Wenn ja ist der Wert okay oder bietet sich ein anderer Wert an? Sieht aber so aus, als wenn er auch zuläuft.

Jetzt hab ich aber leider keine Idee mehr wie ich die httpd2 Prozesse dazu bringe ihren Dienst zu beenden.

Kann mir jemand helfen?

Danke
jPdev.de
 
Last edited by a moderator:
Hallo.
Leider kann ich Dir nicht bei allen Problemen helfen aber wenn Du PHP und MySQL benutzt dann schau Dir mal mysql_pconnect() an. Der Vorteil ist:
Vor dem Verbindungsaufbau wird zunächst versucht eine offene (persistente) Verbindung zum gleichen Host, mit dem gleichen Benutzernamen und Benutzerkennwort zu finden. Wenn das gelingt, wird die Verbindungskennung dieser Verbindung zurückgeliefert anstatt eine neue Verbindung aufzubauen.
 
Ich habe eigentlich überall gelesen, das von dem pconnect abgeraten wurde, wenn solche Probleme wie bei mir auftreten.

Habe es trotzdem mal probiert. Leider ist es so auch nicht besser.


EDIT:

Kennt wenigstens jemand einen Befehl, wo ich sehen kann welche php-Source der einzelne httpd2 Prozess gerade anpasst?
 
Last edited by a moderator:
Back
Top