Webserver sehr langsam ~ 40k User täglich

W-Punkt

New Member
Hallo,

ich habe einen Webserver :

Intel E8400 2x 3GHZ
4 GB RAM
Debian Lenny 64 Bit

auf dem laufen mehrere Webseiten mit Lighttpd / PHP und MySQL. Die Webseiten haben etwa 40k User täglich. Doch ist der server sehr langsam geworden, heute morgen musste er sogar schon swapen und hatte einen load von ~ 6 bis 7. An der Lighttpd config hatte ich schon mal gedreht und diese auch optimiert, dass lief ganz gut,

Wo könnte ich noch ansetzten zu schauen ? Eher an PHP oder MySQL ?

Danke für eure Hilfe
 
Bei den dürftigen Angaben bleibt nur ein Blick in die Glaskugel - ach moment - die habe ich auf Arbeit liegen gelassen ...

Was für Content läuft auf Webseiten (Foren, Downloadseiten etc. pp.)? Sind das bekannte Scripte (CMS-Systeme) oder was eigenes?
Wie sieht Deine aktuelle Lighty, PHP und mySQL-Konfig aus?
Nähere Aussagen zum Userverhalten? Gibt es Peaks also Zeitpunkte wo sich besonders viele User zur gleichen Zeit auf den Webseiten aufhalten? Wie sieht die Last in so einem Moment aus? (Anzahl User, Requests gleichzeitig, Speicherauslastung, CPU)?
 
Peaks sind so zwischen 18 Uhr und 22 Uhr.
Die CMS Scripte sind selber geschrieben, laufen aber auch auf einigen anderen Servern ohne Probleme, dass kann ich ausschließen.

Lighttpd Config

Code:
server.max-fds = 8192
server.max-write-idle = 720
server.max-keep-alive-requests = 0
server.max-keep-alive-idle = 30
server.event-handler = "linux-sysepoll"
server.stat-cache-engine = "simple"

Fast CGI

Code:
fastcgi.server    = ( ".php" => 
	((
		"bin-path" => "/usr/bin/php-cgi",
		"socket" => "/tmp/php.socket" + var.PID,
		"max-procs" => 2,
		"idle-timeout" => 20,
		"bin-environment" => ( 
			"PHP_FCGI_CHILDREN" => "60",
			"PHP_FCGI_MAX_REQUESTS" => "2000"
		),

MySQl läuft ohne besondere Einstellungen.

Normal liegt der Load in Peak Zeiten bei über 1. Was ich auch schon recht hoch finde.
 
40k User? 40K Pageimpressions?

Naja, wobei: Jetzt setzen wir uns alle mal brav hin, und überlegen uns, wie wir als Server reagieren würde, wenn man uns mit 40.000 Fragen an einem Tag bombadiert?
Hast du dir schon mal überlegt, ob das nicht einfach ein paar Requests zu viel an einem Tag sind, und ob du vielleicht ein paar Sachen auslagerst?

Läuft denn noch ein Mailserver auf dem System? Läuft vielleicht sogar Plesk auf dem System?

Suche hier im Forum mal nach mysql tuning da findest du für Mysql schon einiges.

Zur Load: Wenn du zwei CPU-Kerne hast, kann die Load schon mal auf 2 hoch gehen, ohne dass es Probleme machen sollte.
 
Nein, es läuft kein Mailserver auf dem System.
Nur lighttpd / php und mysql.

Was mir eben aufgefallen ist.
Tasks: 3720 total, 1 running, 3719 sleeping,

Ist das so normal.

Zur Userzahl, es sind 40k User, Seitenaufrufe liegen noch etwas höher.
Das hatte ich aber auch auf einem System mit nur 2GB und weniger MHZ hinbekommen. Und der neue ist mit mehr Hardware langsamer ...
 
Ganz einfaches Problem. FastCGI legt bei dieser Menge an Besuchern sehr sehr viele Prozesse auf dem System an. Dadurch läuft dein Arbeitsspeicher mit der Zeit voll und das System wird langsam. Nach einem Reboot ist es meistens wieder ok und nach einem halben Tag ist wieder alles beim alten. Lösung: Anderes PHP Handling verwenden z.B. mod_php in zusammenhang mit suexec oder aber RAM Upgrade auf 8192 MB MINDESTENS! :)

Startet man den Apache Webserver neu, versucht er beim Neustart jeden der 3000 Prozesse zu beenden, daher dauert das entsprechend lange und er wird mit Sicherheit nicht alle Prozesse erwischen.

Wenn du "free" auf der Console eingibst, siehst du die RAM Auslastung, wenn er sich schon dauerhaft im SWAP bewegt und kein Arbeitsspeicher mehr frei ist, wird es akut ;)
 
40.000 "Besucher" sind für so ein System im Allgemeinen ein Witz, wenn das nicht klappt muss die Software entweder außergewöhnlich ineffizient sein, oder die Konfiguration taugt nichts.

Die Empfehlung mit mod_php ist keine gute Idee, FastCGI ist schon das richtige. Allerdings gibt es in diesem Fall 2 Probleme: 1. die Anzahl der konfigurierten PHP-Prozesse ist viel zu hoch (2*60), 10 wären mehr als genug. 2. Selbst mit dieser suboptimalen Konfiguration darf der Server keinesfalls mehrere tausend Prozesse starten, demnach muss da noch irgend was anderes faul sein. "top" und "ps aux" helfen dem auf die Schliche zu kommen.
 
Vielen dank für eure hilfe !
Ich habe nun die lighttpd config angepasst was das Fast_CGI angeht :

Code:
max-procs" => 2,
		"idle-timeout" => 10,
		"bin-environment" => ( 
			"PHP_FCGI_CHILDREN" => "60",

Das die CMS-Systeme hier und da noch etwas optimiert werden können ist sicherlich der Fall, aber wie schon gesagt, liefen diese Systeme auch auf einem schwächeren System mit besserer Leistung, die Scripts sollten hier nicht das Problem sein.

Es stimmt auch, dass der Server nach einem Neustart schnell und dann immer langsamer wurde, auch nahm er mit Zeit immer mehr RAM in Anspruch.

Zur Zeit der ist RAM noch normal, allerdings kommt gleich erst noch der Peak :

Code:
total       used       free     shared    buffers     cached
Mem:       4042416    1510968    2531448          0      72236    1035536

Zur Zeit habe ich auch noch weniger Prozesse am laufen :
Code:
 1 running, 229 sleeping,   0 stopped,   0 zombie

Ist das ein normaler Wert ?
 
Ja, das ist ok, allerdings solltest du die 60 auf <10 reduzieren. Und du solltest der Sache auf den Grund gehen, was los ist wenn ein paar tausend Prozesse laufen. Vielleicht ein Bug in deiner Lighttpd- oder PHP-Version.
 
Ja, das ist ok, allerdings solltest du die 60 auf <10 reduzieren. Und du solltest der Sache auf den Grund gehen, was los ist wenn ein paar tausend Prozesse laufen. Vielleicht ein Bug in deiner Lighttpd- oder PHP-Version.

Meines Erachten ganz normal bei FastCGI, dass wesentlich mehr Prozesse erzeugt werden als beispielsweise bei mod_php o.ä. Deswegen statten wir unsere Webserver auch mit min. 8 GB Arbeitsspeicher aus :)

Code:
top - 00:19:47 up 2 days,  9:59,  1 user,  load average: 1.91, 2.49, 2.83
[B]Tasks: 542 total[/B],   3 running, 538 sleeping,   0 stopped,   1 zombie
Cpu(s): 51.2%us,  2.3%sy,  0.0%ni, 41.8%id,  4.8%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   7827972k total,  7563316k used,   264656k free,   187524k buffers

Nicht auf die CPU Usage achten, ab 0:15 laufen die Festplatten Backups und alles wird kompritimiert und die Server haben richtig was zu tun :)
 
Nein, das ist nicht normal. Es müssen nur so viele PHP-Prozesse laufen dass sie die Hardware voll auslasten können, mehr ergibt keinen Sinn. Mit FastCGI lässt sich das erreichen, mit mod_php nicht.
 
Das muss der Administrator wissen (schätzen, ausprobieren) und die Anzahl der Prozesse entsprechend konfigurieren. Mehr als Anzahl der CPUs mal 2 macht selten Sinn.
 
Back
Top