PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Apache + SuPHP Reload und Serverauslastung



G-S-X
16.09.05, 13:56
Hallo zusammen,


System:
Apache 2.0.48 + SuPHP 0.5.2
CPU : Celeron 2400
Ram : 512 MB
OS : Suse 9.0

Die Kombination läuft fehlerfrei, bis auf folgendes Problem.

SuPHP führt ja die PHP Scripte mit den Rechten des jeweiligen Besitzers aus und startet bei jeder Anfrage einen neuen Prozess.

Wenn ich jetzt als Client mit Strg+R einen schnellen Reload der Seite mache, werden viele neue Prozesse gestartet, die den Server ernorm unter Load stellt.
Jetzt kann ich über die Direktive MaxClients ja die Prozesse, die vom Apache gestartet werden begrenzen und weitere Anfragen werden in einer Warteschlange geparkt. Das Problem ist nur , dass ein einzelner Client den ganzen Server quasi stillegen kann.


Gibt es eine Möglichkeit die Prozesse bzw. Anfragen pro Client zu regulieren ?

server-tuning.conf


<IfModule prefork.c>
# number of server processes to start
StartServers 2
# minimum number of server processes which are kept spare
MinSpareServers 2
# maximum number of server processes which are kept spare
MaxSpareServers 10
# maximum number of server processes allowed to start
MaxClients 20
# maximum number of requests a server process serves
MaxRequestsPerChild 5000
</IfModule>

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5



Ich kann MaxCLients auch nicht zu hoch setzen, da sonst dem Server der RAM zuläuft und er das Swappen anfängt.

ps aus


wwwrun 17643 0.0 2.2 27692 11644 ? S 13:52 0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun 17644 0.0 2.2 27692 11644 ? S 13:52 0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun 17645 0.0 2.2 27692 11660 ? S 13:52 0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun 17649 0.1 2.2 27688 11648 ? S 13:52 0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
k290604 17681 17.0 3.6 59144 19028 ? R 13:52 0:00 /usr/bin/php
k290604 17682 13.5 2.2 58652 11332 ? S 13:52 0:00 /usr/bin/php
k290604 17683 12.0 2.0 58056 10600 ? S 13:52 0:00 /usr/bin/php
k290604 17684 11.0 1.5 23704 8028 ? R 13:52 0:00 /usr/bin/php


Ansonten würde ich FastCgi mal antesten ....

marce
16.09.05, 19:42
am elegantesten ginge wohl, in dem das gestartete Script selbst überprüft, wieviele Instanzen von ihm schon laufen und sich dann evtl. sofort beendet.

Die Prozesse in der httpd.conf sind nur für den Apache, dürften also daher keine Auswirkungen haben...

Alternativ könnte man auch die Prozesse des Users vom System aus beschränken, evtl. ist dann aber halt normales Arbeiten nicht mehr uneingeschränkt möglich...

G-S-X
05.10.05, 10:24
am elegantesten ginge wohl, in dem das gestartete Script selbst überprüft, wieviele Instanzen von ihm schon laufen und sich dann evtl. sofort beendet.

Die Prozesse in der httpd.conf sind nur für den Apache, dürften also daher keine Auswirkungen haben...

Alternativ könnte man auch die Prozesse des Users vom System aus beschränken, evtl. ist dann aber halt normales Arbeiten nicht mehr uneingeschränkt möglich...

Erstes fehlt mir jetzt der Ansatz, ich kann zwar ein wenig Perl, wüßte aber jetzt nicht wie ich die Parameter wie IP usw, vom Apache bekomme ... :rolleyes:

Stimmt die Prozesse haben keine Auswirkng und greifen nicht ,,,

Du meinst also, dass ich über PAM die Prozesse pro benutzer bschränken ... Könnte ich mal probieren, die frage ist nur, was passiert wenn keine Prozesse mehr frei sind ....

Das ist eigentlich ein unding, dass man über suphp die Prozesse nicht beschränken kann... :mad: