Apache2 - Prefork-Settings Server mit 2x DualCore Opteron mit 4GB Ram

Apache, Lighttpd, nginx, Cherokee
Post Reply
itroxx
Posts: 8
Joined: 2006-03-06 08:33
 

Apache2 - Prefork-Settings Server mit 2x DualCore Opteron mit 4GB Ram

Post by itroxx »

n'abend allerseits,

habe hier einen Suse 9.3 mit zwei DualCore Opterons drin und 4 GB Ram. Apache2 mpm-prefork PHP4 mysql 4.1. Bin von einer Managed Maschine auf einen Root mit gleicher Hardwareausstattung gewechselt.

Bei 400 eingeloggeten Usern war der Load Average so knapp unter 1 und bei ca. 85% Idle.

Nun konnte ich beobachten, dass der Server bei 400 Usern quasi zu machte. Die Seite fing also an zu haken. Der mysqld ging dabei kurz ganz hoch auf über 50% (auch kurz mal 90%) dann aber gleich wieder runter. Danach reagierte er für einige Klicks ganz normal, hakte dann aber wieder.

Aber bei 400 Usern war Schluss.

Habe dann in der server-tuning.conf

die prefork setting hochgesetzt

ServerLimit 150 => auf 200
MaxClients 150 => auf 200
MaxRequestsPerChild 10000 => auf 40000

Gleich nach restart des Apachen waren sofort über 430 User angemeldet. Ich werde jetzt heute abend mal beobachten bis wieviel User die Einstellungen jetzt reichen. Sollten so über 600 werden.

Ich wüßte aber gerne was ihr so meint wie die Settings bei so einer Maschine gesetzt werden können. Auch gerne Anregungen zu my.cnf Einstellungen. (Cache, Buffer usw). In der DB sind aktuell ca. 1.5 GB Daten davon zwei großen Tabellen. (Messagesystem) Slow query log ist leer. Index sollte auch alle i.O. sein

Danke schonmal
Gruß Daniel


Die Settings sind jetzt also wie folgt:
# prefork MPM
<IfModule prefork.c>
# number of server processes to start
StartServers 5
# minimum number of server processes which are kept spare
MinSpareServers 5
# maximum number of server processes which are kept spare
MaxSpareServers 10
# highest possible MaxClients setting for the lifetime of the Apache process.
ServerLimit 200
# maximum number of server processes allowed to start standard 150
MaxClients 200
# maximum number of requests a server process serves
MaxRequestsPerChild 40000
</IfModule>
dazu noch einiges aus der my.cnf

Code: Select all

safe-user-create      = 1
key_buffer_size       = 128M
sort_buffer_size      = 4M
join_buffer_size      = 4M
read_buffer_size      = 4M
read_rnd_buffer_size  = 8M
myisam_sort_buffer_size = 64M
max_allowed_packet    = 16M
thread_cache_size     = 8
table_cache           = 256
query_cache_type      = 1
query_cache_size      = 64M
query_cache_limit     = 1M
thread_concurrency    = 8
local-infile          = 0

[isamchk]
character-sets-dir    = latin1
key_buffer_size       = 128M
sort_buffer_size      = 128M
read_buffer_size      = 4M
write_buffer_size     = 4M

[myisamchk]
character-sets-dir    = latin
key_buffer_size       = 128M
sort_buffer_size      = 128M
read_buffer_size      = 4M
write_buffer_size     = 4M

[mysqlhotcopy]
interactive-timeout
:?:
itroxx
Posts: 8
Joined: 2006-03-06 08:33
 

Re: Apache2 - Prefork-Settings Server mit 2x DualCore Opteron mit 4GB Ram

Post by itroxx »

hier nochmal ein gekürzter top Auszug wo der mysqld kurz hoch geht. Geht dann aber auch wieder auf 10% runter aber auch wieder auf über 60%

Code: Select all

top - 18:07:10 up 34 days,  2:13,  1 user,  load average: 0.87, 0.85, 0.89
Tasks: 314 total,   4 running, 309 sleeping,   0 stopped,   1 zombie
Cpu(s): 12.8% us,  4.7% sy,  0.0% ni, 82.4% id,  0.0% wa,  0.0% hi,  0.1% si
Mem:   4028784k total,  3849492k used,   179292k free,     9396k buffers
Swap:  1953784k total,    10112k used,  1943672k free,  2885296k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
17033 mysql     15   0  260m  68m 4276 S 39.2  1.7  17:57.82 mysqld
24151 wwwrun    15   0  104m 8992 3356 S  1.7  0.2   0:00.11 httpd2-prefork
23906 wwwrun    15   0  107m  11m 3448 S  1.3  0.3   0:00.27 httpd2-prefork
24157 wwwrun    15   0  105m  10m 2908 S  1.3  0.3   0:00.04 httpd2-prefork
21961 wwwrun    16   0  106m  10m 3508 S  1.0  0.3   0:00.67 httpd2-prefork
23330 wwwrun    15   0  107m  12m 3548 S  1.0  0.3   0:00.85 httpd2-prefork
23515 wwwrun    15   0  107m  11m 3616 S  1.0  0.3   0:00.90 httpd2-prefork
23822 wwwrun    15   0  104m 8924 3384 S  1.0  0.2   0:00.31 httpd2-prefork
23965 wwwrun    15   0  104m 9364 3456 S  1.0  0.2   0:00.24 httpd2-prefork
24018 wwwrun    15   0  104m 9376 3352 S  1.0  0.2   0:00.10 httpd2-prefork
24061 wwwrun    15   0  104m 8940 3368 S  1.0  0.2   0:00.13 httpd2-prefork
24113 wwwrun    15   0  104m 8880 3352 S  1.0  0.2   0:00.08 httpd2-prefork
24150 wwwrun    15   0  104m 8984 3356 S  1.0  0.2   0:00.07 httpd2-prefork
21059 wwwrun    16   0  107m  12m 3692 S  0.7  0.3   0:03.90 httpd2-prefork
21592 wwwrun    16   0  107m  11m 3596 S  0.7  0.3   0:01.55 httpd2-prefork
21869 root      16   0  4548 1364  868 R  0.7  0.0   0:05.98 top
21
hier mal free -m

Code: Select all

             total       used       free     shared    buffers     cached
Mem:          3934       3737        197          0          9       2821
-/+ buffers/cache:        906       3027
Swap:         1907          9       1898
itroxx
Posts: 8
Joined: 2006-03-06 08:33
 

Re: Apache2 - Prefork-Settings Server mit 2x DualCore Opteron mit 4GB Ram

Post by itroxx »

hatte jetzt das GEfühl, dass bei ca 550 es wieder etwas langsamer wurde. Habe jetzt die beide Werte nochmal von 200 auf 250 erhöht.
Habe jetzt subjektiv das Gefühl das er wieder rennt. Kann aber vielleicht auch durch das apache2 restart kommen.

Vielleicht findet sich ja noch wer mit ahnung hier. Wäre super
Danke
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim
 

Re: Apache2 - Prefork-Settings Server mit 2x DualCore Opteron mit 4GB Ram

Post by oxygen »

Warum benutzt du überhaupt prefork als MPM, worker oder event wären in dieser Umgebung sicher sehr viel performater.
itroxx
Posts: 8
Joined: 2006-03-06 08:33
 

Re: Apache2 - Prefork-Settings Server mit 2x DualCore Opteron mit 4GB Ram

Post by itroxx »

ich würde Mal sagen aus Unwissenheit und weil es so vorinstalliert war. :oops: Und weil ich wohl den Unterschied zwischen "forkenden Webserver ohne Thread-Unterstützung" und "Hybrid-Webserver mit Multi-Thread und Multi-Prozess-Unterstützung" nicht wahrgenommen habe.

Das hört sich also nach einem durchaus berechtigten Einwand an :?

Was ist nun zu tun?
Neu kompilieren mit --with-mpm=worker?
Geht das einfach so?

so siehts im Moment aus:

Code: Select all

___:/etc/apache2 # httpd2 -V
Server version: Apache/2.0.53
Server built:   Oct 15 2005 14:41:12
Server's Module Magic Number: 20020903:9
Architecture:   64-bit
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D HTTPD_ROOT="/srv/www"
 -D SUEXEC_BIN="/usr/sbin/suexec2"
 -D DEFAULT_PIDLOG="/var/run/httpd2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="/var/run/accept.lock"
 -D DEFAULT_ERRORLOG="/var/log/apache2/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/etc/apache2/httpd.conf"

Code: Select all

__:/etc/apache2 # httpd2 -l
Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53
 

Re: Apache2 - Prefork-Settings Server mit 2x DualCore Opteron mit 4GB Ram

Post by Roger Wilco »

itroxx wrote:Was ist nun zu tun?
Neu kompilieren mit --with-mpm=worker?
Geht das einfach so?
Ich würde damit anfangen, das Paket apache2-worker zu installieren und die Konfiguration danach anzupassen...
andreask2
Posts: 696
Joined: 2004-01-27 14:16
Location: Aachen
 

Re: Apache2 - Prefork-Settings Server mit 2x DualCore Opteron mit 4GB Ram

Post by andreask2 »

øxygen wrote:Warum benutzt du überhaupt prefork als MPM, worker oder event wären in dieser Umgebung sicher sehr viel performater.
Ich würde es vor allem deshalb nicht machen:
itroxx wrote:Apache2 mpm-prefork PHP4 mysql 4.1
http://de3.php.net/manual/de/faq.instal ... on.apache2
oder etwas ausführlicher: http://news.php.net/php.internals/10491
itroxx
Posts: 8
Joined: 2006-03-06 08:33
 

Re: Apache2 - Prefork-Settings Server mit 2x DualCore Opteron mit 4GB Ram

Post by itroxx »

Guten Morgen Andreas, schonmal vielen Dank für deinen Beitrag.
Ich hatte auch nur gelesen, dass der prefork stabiler sei und mir deshalb auch keine weiteren Gedanken darüber gemacht.

Der zweite Artikel von Herrn Lerdorf beschreibt die Problematik ja recht ausführlich. In dem Artikel empfielt er deshalb beim Apache Version 1 zu bleiben. Jetzt ist der Artikel aber aus Juni 2004, also fast 2 Jahre her. Ist der Performanceunterschied zwischen Prefork und Worker so deutlich? Wie wäre denn bei meiner Konfiguration der Unterschied zwischen 1.3 und 2.0-prefork

Für mich stellt sich jetzt die Frage wie ich die aktuelle Konfiguration optimieren kann. Also sind wir jetzt quasi wieder bei der Ausgangsfrage.

Gruß Daniel

PS: Kann es eigentlich sein, dass die Boardsuche nicht so wirklich funktioniert? Wenn ich über Google das Forum durchsuche erhalte ich viel mehr Ergebnisse als über die Boardsuche.
User avatar
Joe User
Project Manager
Project Manager
Posts: 11191
Joined: 2003-02-27 01:00
Location: Hamburg
Contact:
 

Re: Apache2 - Prefork-Settings Server mit 2x DualCore Opteron mit 4GB Ram

Post by Joe User »

itroxx wrote:PS: Kann es eigentlich sein, dass die Boardsuche nicht so wirklich funktioniert? Wenn ich über Google das Forum durchsuche erhalte ich viel mehr Ergebnisse als über die Boardsuche.
Das liegt unter Anderem daran, dass bestimmte Foren (Bsp.: unerwünscht, smalltalk) und Begriffe (Bsp.: <3 und >20 Zeichen) von der SuFu nicht berücksichtigt werden.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
andreask2
Posts: 696
Joined: 2004-01-27 14:16
Location: Aachen
 

Re: Apache2 - Prefork-Settings Server mit 2x DualCore Opteron mit 4GB Ram

Post by andreask2 »

itroxx wrote:Der zweite Artikel von Herrn Lerdorf beschreibt die Problematik ja recht ausführlich. In dem Artikel empfielt er deshalb beim Apache Version 1 zu bleiben. Jetzt ist der Artikel aber aus Juni 2004, also fast 2 Jahre her. Ist der Performanceunterschied zwischen Prefork und Worker so deutlich? Wie wäre denn bei meiner Konfiguration der Unterschied zwischen 1.3 und 2.0-prefork
Er hat das hinter auch noch etwas relativiert, was Apache-2 prefork angeht. Ich finde gerade die Diskussion nicht, aber er (und die meisten anderen Core-Devs) sagen, dass Apache-2 prefork prinzipiell OK ist, mit dem einzigen Nachteil, dass fast alle Core-Devs und fast alle großen PHP-Installationen noch Apache 1.3 verwenden, somit diese Variante die mit Abstand ausgereifteste ist. Im Gegensatz dazu ist die Apache-2 SAPI von PHP noch recht neu und nicht annährend so gut getestet wie die 1.3er SAPI (und es gibt im "Notfall" weniger Leute die sich damit auskennen).

Inzwischen gibt es schon einige wenige Core-Devs, die selber Apache2 einsetzen, und auch vor wenigen Wochen/Monaten noch einige Bugs aus der Apache-2 SAPI entfernt haben... Da der Apache-2 prefork eigentlich keine besonderen Vorteile gegenüber 1.3 bringt, im Gegenteil dazu eher zusätzliche Umstellungsarbeit und Portierung von eigenen Apache-Modulen... verwendet ein Großteil der Core-Devs eben noch heute Apache 1.3.

Aber mit multithreaded Webservern auf Linux sollte PHP nicht verwendet werden (zumindest nicht als Modul). Abgesehen von den im Posting genannten Nachteilen, PHP wird durch die ZTS Checks auch langsamer!

Ich persönlich setze inzwischen auch Apache-2 prefork ein, einfach aus dem Grund, weil ich letztens eine gute Gelegenheit hatte umzustellen. Und dann mache ich es doch leiber bei so einer Gelegenheit, als zu warten bis Apache 1.3 vom Distributer nicht mehr ordentlich unterstützt wird und ich zu einem ungünstigeren Zeitpunkt umstellen muss.

Evtl. macht es Sinn einen 2. Apachen mit Worker MPM für Zugriffe auf statische Resourcen (ohne PHP & Co.) zu verwenden.
itroxx wrote:Für mich stellt sich jetzt die Frage wie ich die aktuelle Konfiguration optimieren kann. Also sind wir jetzt quasi wieder bei der Ausgangsfrage.
Zur Optimierung, hier ein paar Links:
http://aktuell.de.selfhtml.org/artikel/ ... index.html
http://kris.koehntopp.de/artikel/webtune/
http://omniti.com/~george/talks/practic ... rmance.pdf
http://dev.mysql.com/doc/refman/4.0/de/ ... ation.html (etwas aktueller in en...)
http://httpd.apache.org/docs/2.2/misc/perf-tuning.html

und natürlich die neusten MySQL Artikel von isotopp hier im DB-Forum!
Post Reply