apache2.conf bei 8 Gigabyte RAM

Apache, Lighttpd, nginx, Cherokee
wiedervergessen2
Posts: 22
Joined: 2008-01-07 22:09

apache2.conf bei 8 Gigabyte RAM

Post by wiedervergessen2 » 2008-01-07 22:20

Ich habe den 1und1 Root Server mit 8 Gigabyte Ram und lasse dort PHP5 und MySQL 4.1 laufen.

Bis 420 eingeloggte User ist die Seite schnell, und dann geht garnichts mehr.

Mein Konfiguration ist dabei:

<IfModule mpm_prefork_module>
StartServers 400
MinSpareServers 100
MaxSpareServers 150
ServerLimit 550
MaxClients 550
MaxRequestsPerChild 0
</IfModule>

Wenn ich StartServers auf 500 erhöhe läuft garnichts.

Hier ist die top Ausgabe:

top - 21:18:50 up 2:03, 2 users, load average: 11.32, 9.96, 9.78
Tasks: 316 total, 5 running, 310 sleeping, 0 stopped, 1 zombie
Cpu(s): 64.3% us, 12.5% sy, 0.0% ni, 21.7% id, 0.2% wa, 0.1% hi, 1.1% si
Mem: 8240616k total, 7184628k used, 1055988k free, 4932k buffers
Swap: 1959920k total, 0k used, 1959920k free, 4656196k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4252 mysql4 15 0 769m 358m 4088 S 94.0 4.5 120:23.05 mysqld
19762 www-data 15 0 184m 18m 3684 S 4.0 0.2 0:01.15 apache2
19857 www-data 15 0 185m 18m 3596 S 4.0 0.2 0:01.03 apache2
19604 www-data 16 0 186m 18m 4516 S 3.7 0.2 0:01.22 apache2
19931 www-data 15 0 183m 16m 3604 S 3.7 0.2 0:00.99 apache2
19583 www-data 24 0 185m 18m 3768 R 3.3 0.2 0:01.12 apache2
19666 www-data 16 0 184m 17m 3596 S 3.3 0.2 0:01.24 apache2
19691 www-data 15 0 185m 18m 3692 S 3.3 0.2 0:01.26 apache2
19692 www-data 15 0 185m 18m 3692 S 3.3 0.2 0:01.19 apache2
19921 www-data 15 0 184m 18m 3628 S 3.3 0.2 0:01.28 apache2
19612 www-data 15 0 185m 18m 3832 S 3.0 0.2 0:01.44 apache2
19836 www-data 16 0 184m 18m 3692 S 3.0 0.2 0:01.17 apache2
19890 www-data 15 0 184m 18m 3872 S 3.0 0.2 0:01.12 apache2
19918 www-data 15 0 185m 18m 3684 S 3.0 0.2 0:01.17 apache2
19861 www-data 15 0 185m 18m 3704 S 2.7 0.2 0:01.07 apache2

Apache2 spuckt folgendes aus:

Server uptime: 4 minutes 29 seconds
Total accesses: 31499 - Total Traffic: 44.6 MB
CPU Usage: u412.34 s33.75 cu.11 cs0 - 166% CPU load
117 requests/sec - 169.6 kB/second - 1483 B/request
47 requests currently being processed, 133 idle workers

_..__..W._._...__._.__.._._.___.___....W...C..._..W__.C__.__R.W.
.._....C..._.._..CC..__._.W_.__._.CC.__._...._._.__C..._....._._
....C.....C......C.__.._...._W...C..._.C....._.C..._...W.._...__
_C__...._..._..CC_...._._..W.___C..__._.._.__...__..__.CC____._.
___._._._W.._C...C_._.__..._____..._.._...C...__..___C..._C._._.
.C.......C_.___..C_...C_C..._...._._.._..C_C....C.._.._W._____._
W._.C___.__.._.C................................................
................................................................
......................................

Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process

Keep Alive ist off.

Wie ist denn die Vorgehensweise bei sowas ausser Blind mit den Parametern herumzuspielen?

wiedervergessen2
Posts: 22
Joined: 2008-01-07 22:09

Re: apache2.conf bei 8 Gigabyte RAM

Post by wiedervergessen2 » 2008-01-07 22:40

[snip]
Last edited by Joe User on 2008-01-07 22:54, edited 1 time in total.
Reason: Solche Angebote sind hier unerwünscht!

User avatar
Joe User
Project Manager
Project Manager
Posts: 11614
Joined: 2003-02-27 01:00
Location: Hamburg

Re: apache2.conf bei 8 Gigabyte RAM

Post by Joe User » 2008-01-07 22:53

http://httpd.apache.org/docs/2.2/misc/perf-tuning.html

BTW: Gemäss top wären 4GB RAM völlig ausreichend...
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.

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: apache2.conf bei 8 Gigabyte RAM

Post by Roger Wilco » 2008-01-07 23:05

Wenn ich raten müsste, würde ich sagen, dass der MySQL-Server der Flaschenhals ist und nicht der Webserver...

User avatar
Joe User
Project Manager
Project Manager
Posts: 11614
Joined: 2003-02-27 01:00
Location: Hamburg

Re: apache2.conf bei 8 Gigabyte RAM

Post by Joe User » 2008-01-07 23:08

Versuche es mal mit:

Code: Select all

KeepAlive Off
KeepAliveTimeout 2
MaxKeepAliveRequests 50
<IfModule mpm_prefork_module>
    StartServers          50
    MinSpareServers       50
    MaxSpareServers      250
    MaxClients           750
    MaxRequestsPerChild 5000
</IfModule>
UseCanonicalName On
HostnameLookups Off

Gegebenenfalls auf mpm-worker oder gleich lighttpd umsteigen. Ansonsten siehe Roger Wilco...
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.

wiedervergessen2
Posts: 22
Joined: 2008-01-07 22:09

Re: apache2.conf bei 8 Gigabyte RAM

Post by wiedervergessen2 » 2008-01-08 00:17

Danke!

Wenn KeepAlive = off ist, ist doch
KeepAliveTimeout und
KeepAliveRequests egal, oder nicht ?

StartServers muss relativ hoch sein, da sonst bei voller Last der Server garnicht
mehr läuft wenn ich Apache stoppe und starte.

Da der Server zu Peak Zeiten gut laufen soll, kann ich ja die maximale Anzahl der Server dauernd haben,
auch wenn nichts los ist.

Was hat es genau mit dem MaxRequestsPerChild auf sich? 0=unbegrenzt?

Was ist ein Child? Die Anzahl der Threads pro Server ?

HostnameLookups brauche ich glaube ich für mod_rewrite abhängig von Domainnamen
oder von IP Adressen Lookups oder so ?

Ich habe nun folgende Einstellung und es läuft gerade ganz gut:

<IfModule mpm_prefork_module>
StartServers 500
MinSpareServers 500
MaxSpareServers 500
ServerLimit 500
MaxClients 500
MaxRequestsPerChild 0
</IfModule>

top - 23:14:06 up 3:59, 2 users, load average: 8.71, 9.86, 10.63
Tasks: 588 total, 1 running, 587 sleeping, 0 stopped, 0 zombie
Cpu(s): 50.3% us, 21.4% sy, 0.0% ni, 27.3% id, 0.0% wa, 0.1% hi, 1.0% si
Mem: 8240616k total, 8108072k used, 132544k free, 4584k buffers
Swap: 1959920k total, 864k used, 1959056k free, 3038432k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4252 mysql4 15 0 784m 370m 4128 S 99.9 4.6 239:57.55 mysqld
7552 www-data 16 0 187m 19m 4512 S 3.0 0.2 0:02.24 apache2
7660 www-data 16 0 186m 19m 3736 S 2.6 0.2 0:02.50 apache2
7663 www-data 17 0 187m 19m 4588 S 2.6 0.2 0:02.05 apache2
7866 www-data 16 0 185m 18m 3928 S 2.6 0.2 0:02.52 apache2
7703 www-data 15 0 192m 24m 4516 S 2.3 0.3 0:02.41 apache2
7859 www-data 15 0 187m 18m 4552 S 2.3 0.2 0:02.12 apache2
7916 www-data 15 0 187m 19m 4500 S 2.3 0.2 0:02.13 apache2
7548 www-data 16 0 184m 17m 3740 S 2.0 0.2 0:01.87 apache2
7830 www-data 15 0 185m 18m 3808 S 2.0 0.2 0:02.22 apache2
7833 www-data 16 0 184m 17m 3660 S 2.0 0.2 0:02.15 apache2
7843 www-data 16 0 185m 18m 3800 S 2.0 0.2 0:02.39 apache2
7460 www-data 16 0 185m 18m 3748 S 1.6 0.2 0:02.15 apache2
7748 www-data 16 0 186m 18m 4520 S 1.6 0.2 0:02.02 apache
7769 www-data 15 0 185m 19m 4208 S 1.6 0.2 0:02.64 apache2
7912 www-data 16 0 187m 19m 4744 S 1.6 0.2 0:02.23 apache2
7501 www-data 16 0 188m 19m 4520 S 1.3 0.2 0:02.32 apache2

Wie kann ich berechnen wieviele Server ich mir "leisten" kann ohne dem MySQL CPU
oder Memory wegzunehmen?

Ich bin nicht sicher ob MySQL wirklich ein Bottleneck ist.

Habe gehört MySQL schnappt sich eh immer soviel CPU wie es bekommen kann, daher
fast immer 100% Auslastung.

Current Time: Monday, 07-Jan-2008 23:19:10 UTC
Restart Time: Monday, 07-Jan-2008 23:03:54 UTC
Parent Server Generation: 0
Server uptime: 15 minutes 16 seconds
Total accesses: 123143 - Total Traffic: 180.0 MB
CPU Usage: u1653.86 s141.45 cu6.43 cs0 - 197% CPU load
134 requests/sec - 201.2 kB/second - 1532 B/request
50 requests currently being processed, 450 idle workers

__________W_W_____________R________________W__________________W_
__C______W__________________________W__________________________C
__W_W_____________W___________________________C_W_________W__W_C
___________R_____________W___________W_W_________________W______
_______W_____W__________W_C__W________________C_________________
___________C_____________WW__________C______W__W______W_______W_
_____W__CW______________W___W_____W____C____W___________________
_______________________R__W______W__WW_W____________

Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process

wiedervergessen2
Posts: 22
Joined: 2008-01-07 22:09

Re: apache2.conf bei 8 Gigabyte RAM

Post by wiedervergessen2 » 2008-01-08 00:21

Habe ich denn nun 180 MByte oder 18 MByte pro Thread/Server?

User avatar
Joe User
Project Manager
Project Manager
Posts: 11614
Joined: 2003-02-27 01:00
Location: Hamburg

Re: apache2.conf bei 8 Gigabyte RAM

Post by Joe User » 2008-01-08 00:44

wiedervergessen2 wrote:Wenn KeepAlive = off ist, ist doch
KeepAliveTimeout und
KeepAliveRequests egal, oder nicht ?

Ja, aber man macht auch gerne den Fehler und aktiviert KeepAlive versehentlich wieder und dann möchte man trotzdem erreichbar bleiben ;)
wiedervergessen2 wrote:StartServers muss relativ hoch sein, da sonst bei voller Last der Server garnicht
mehr läuft wenn ich Apache stoppe und starte.

Das solltest Du Dir schnell abgewöhnen, dafür hat man Low-Traffik-Zeiten.
wiedervergessen2 wrote:Da der Server zu Peak Zeiten gut laufen soll, kann ich ja die maximale Anzahl der Server dauernd haben,
auch wenn nichts los ist.

Überflüssige Ressourcenverschwendung und Umweltverschmutzung müssen doch nicht sein, oder?
wiedervergessen2 wrote:Was hat es genau mit dem MaxRequestsPerChild auf sich? 0=unbegrenzt?

Lies und verstehe obigen Link. Zusätzlich begrentzt man durch geringere Werte die Auswirkungen von Memory-Leaks in den Apache-Modulen.
0-unbegrenzt=böse
wiedervergessen2 wrote:HostnameLookups brauche ich glaube ich für mod_rewrite abhängig von Domainnamen
oder von IP Adressen Lookups oder so ?

Nein.
wiedervergessen2 wrote:Ich habe nun folgende Einstellung und es läuft gerade ganz gut:

Nimm bitte meine und verstehe obigen Link.
wiedervergessen2 wrote:Wie kann ich berechnen wieviele Server ich mir "leisten" kann ohne dem MySQL CPU
oder Memory wegzunehmen?

Auch hier kann ich nur auf obigen Link verweisen, dort steht alles nötige geschrieben.
wiedervergessen2 wrote:Ich bin nicht sicher ob MySQL wirklich ein Bottleneck ist.

Relativ oft.
wiedervergessen2 wrote:Habe gehört MySQL schnappt sich eh immer soviel CPU wie es bekommen kann, daher
fast immer 100% Auslastung.

Kurz und grob: MySQL schnappt sich immer soviel Speicher/CPU, wie es auch benötigt.
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.

flo
RSAC
Posts: 2297
Joined: 2002-07-28 13:02
Location: Berlin

Re: apache2.conf bei 8 Gigabyte RAM

Post by flo » 2008-01-08 11:15

Hast Du zumindest einen groben Überblick, wie viele Queries der Mysqld pro Sekunde verarbeiten muß? 450 Besucher verursachen ja auch dementsprechende Anfragen und in dem Rechner wird "nur" ein Software-Raid sein!?

wiedervergessen2
Posts: 22
Joined: 2008-01-07 22:09

Re: apache2.conf bei 8 Gigabyte RAM

Post by wiedervergessen2 » 2008-01-08 22:34

Code: Select all

Total     ø per hour     ø per minute     ø per second
1 M    2.69 M         44.80 k    746.73


max. concurrent connections     255     ---     ---
Failed attempts    0    0.00    0.00%

Threads_connected     153      The number of currently open connections.
Threads_created    8 k    The number of threads created to handle connections. If Threads_created is big, you may want to increase the thread_cache_size value. (Normally this doesn't give a notable performance improvement if you have a good thread implementation.)
Threads_running    25    The number of threads that are not sleeping.
Threads_cache_hitrate_%    94.44 %    

Open_files     127      The number of files that are open.



wiedervergessen2
Posts: 22
Joined: 2008-01-07 22:09

Re: apache2.conf bei 8 Gigabyte RAM

Post by wiedervergessen2 » 2008-01-08 22:51

Ich habe nun:

Code: Select all

<IfModule mpm_prefork_module>
    StartServers          600
    MinSpareServers       600
    MaxSpareServers       600
    ServerLimit           600
    MaxClients            600
    MaxRequestsPerChild   10000
</IfModule>



Ist MaxRequestsPerChild nicht zu hoch? Wie bestimmt man dafür den besten Wert?

Ich habe gemerkt, dass so ab 500 Usern die Seite wieder langsam wird und es kommt zu viele Waiting Prozessen bei Apache....normalerweise sind
diese in der Minderheit, erreichen dann aber eine Balance mit den Connected und irgendwann sind die Mehrzeit der Prozesse im Waiting Zustand.
Ich hab nun mal MaxRequestsPerChild gesetzt und schaue mal, ob es was ändert.

djcrackman
RSAC
Posts: 208
Joined: 2005-06-02 11:58

Re: apache2.conf bei 8 Gigabyte RAM

Post by djcrackman » 2008-01-09 07:43

Code: Select all

__________W_W_____________R________________W__________________W_
__C______W__________________________W__________________________C
__W_W_____________W___________________________C_W_________W__W_C
___________R_____________W___________W_W_________________W______
_______W_____W__________W_C__W________________C_________________
___________C_____________WW__________C______W__W______W_______W_
_____W__CW______________W___W_____W____C____W___________________
_______________________R__W______W__WW_W____________


Dein Apache ist am Nasenbohren, sollte das ein Quote von einem heavy-load Zustand sein.

flo
RSAC
Posts: 2297
Joined: 2002-07-28 13:02
Location: Berlin

Re: apache2.conf bei 8 Gigabyte RAM

Post by flo » 2008-01-09 11:09

Code: Select all

Total     ø per hour     ø per minute     ø per second
1 M    2.69 M         44.80 k    746.73


Wenn das Queries sind, ist das schon ganz schön heftig, selbst bei der Cacherate bleibt schon noch einiges übrig, was bedient werden möchte.

wiedervergessen2
Posts: 22
Joined: 2008-01-07 22:09

Re: apache2.conf bei 8 Gigabyte RAM

Post by wiedervergessen2 » 2008-01-11 10:03

Warum gibt es nirgends im Internet etwas genaueres zu MaxRequestsPerChild?

Das einzige was ich finden kann ist, dass es besser ist statt 0, 10000 zu nehmen. Aber warum genau 10000 und nicht 100, 500 oder 1000 ist nirgends erklärt.
Mir erscheint 10000 hoch...vor allem wenn man 700 Server hat - dann sind es ja 7 Mio Requests ?

wiedervergessen2
Posts: 22
Joined: 2008-01-07 22:09

Re: apache2.conf bei 8 Gigabyte RAM

Post by wiedervergessen2 » 2008-01-11 10:08

Also ich habe MaxRequestsPerChild mal auf 2500 gesetzt und beobachte mal den Langzeit Effekt.

Ich habe das Gefühl, dass sich was akkumuliert und so immer ca. alle 12 Stunden der Server abkackt bzw. ewig langsam wird:

Code: Select all

top - 09:06:03 up 25 min,  2 users,  load average: 2.67, 2.91, 2.66
Tasks: 690 total,   3 running, 687 sleeping,   0 stopped,   0 zombie
Cpu(s): 32.0% us,  9.5% sy,  0.0% ni, 56.6% id,  0.8% wa,  0.1% hi,  0.9% si
Mem:   8240616k total,  4010136k used,  4230480k free,     2044k buffers
Swap:  1959920k total,        0k used,  1959920k free,  1328036k cached


Code: Select all

top - 09:07:36 up 26 min,  2 users,  load average: 1.85, 2.58, 2.57
Tasks: 691 total,   1 running, 690 sleeping,   0 stopped,   0 zombie
Cpu(s): 16.2% us,  2.7% sy,  0.0% ni, 73.7% id,  7.0% wa,  0.1% hi,  0.3% si
Mem:   8240616k total,  4715796k used,  3524820k free,     2124k buffers
Swap:  1959920k total,        0k used,  1959920k free,  1358012k cached


Code: Select all

top - 09:11:05 up 30 min,  2 users,  load average: 2.39, 2.48, 2.52
Tasks: 692 total,   4 running, 688 sleeping,   0 stopped,   0 zombie
Cpu(s): 27.9% us,  5.5% sy,  0.0% ni, 61.5% id,  4.1% wa,  0.2% hi,  0.7% si
Mem:   8240616k total,  6112556k used,  2128060k free,     2356k buffers
Swap:  1959920k total,        0k used,  1959920k free,  1441896k cached


Code: Select all

top - 09:19:17 up 38 min,  2 users,  load average: 2.11, 2.32, 2.40
Tasks: 690 total,   1 running, 689 sleeping,   0 stopped,   0 zombie
Cpu(s): 23.3% us,  5.0% sy,  0.0% ni, 67.5% id,  3.5% wa,  0.0% hi,  0.7% si
Mem:   8240616k total,  7028984k used,  1211632k free,     2844k buffers
Swap:  1959920k total,        0k used,  1959920k free,  1543476k cached


Code: Select all

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3382 mysql4    15   0  544m 216m 3992 S 31.7  2.7  15:40.22 mysqld
 5609 www-data  15   0  185m  18m 3664 S  3.0  0.2   0:01.38 apache2
 6178 www-data  15   0  187m  21m 4204 S  3.0  0.3   0:01.41 apache2
 5680 www-data  16   0  183m  16m 3616 S  2.6  0.2   0:01.20 apache2
 


Mal schauen wie es in einer halben Stunde und in einer Stunde aussieht.

Folgendes ist in meminfo drin:

Code: Select all

/etc/apache2# cat /proc/meminfo
MemTotal:      8240616 kB
MemFree:       1059164 kB
Buffers:          3068 kB
Cached:        1576844 kB
SwapCached:          0 kB
Active:        6153900 kB
Inactive:       416364 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:      8240616 kB
LowFree:       1059164 kB
SwapTotal:     1959920 kB
SwapFree:      1959920 kB
Dirty:            3216 kB
Writeback:           0 kB
Mapped:        5028344 kB
Slab:           346552 kB
CommitLimit:   6080228 kB
Committed_AS: 11430860 kB
PageTables:     225568 kB
VmallocTotal: 34359738367 kB
VmallocUsed:      2648 kB
VmallocChunk: 34359735135 kB


Code: Select all

top - 09:27:18 up 46 min,  2 users,  load average: 3.23, 2.72, 2.53
Tasks: 690 total,   2 running, 688 sleeping,   0 stopped,   0 zombie
Cpu(s): 29.8% us,  8.3% sy,  0.0% ni, 60.2% id,  1.3% wa,  0.0% hi,  0.4% si
Mem:   8240616k total,  7402360k used,   838256k free,     3284k buffers
Swap:  1959920k total,        0k used,  1959920k free,  1703108k cached

  PID USER      RES  PR  NI  VIRT  SHR S %CPU %MEM    TIME+  COMMAND
 3382 mysql4   237m  15   0  543m 3992 S 60.1  2.9  20:06.15 mysqld
 5952 www-data  25m  15   0  193m 4704 S  3.0  0.3   0:02.56 apache2
 6155 www-data  17m  15   0  184m 3852 S  3.0  0.2   0:02.30 apache2
 6191 www-data  18m  15   0  184m 3756 S  3.0  0.2   0:02.28 apache2



Code: Select all

top - 09:42:05 up  1:01,  2 users,  load average: 2.98, 2.82, 2.66
Tasks: 693 total,   2 running, 691 sleeping,   0 stopped,   0 zombie
Cpu(s): 27.8% us,  7.5% sy,  0.0% ni, 59.9% id,  4.1% wa,  0.1% hi,  0.7% si
Mem:   8240616k total,  7794140k used,   446476k free,     3980k buffers
Swap:  1959920k total,        0k used,  1959920k free,  1810260k cached


Code: Select all

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3382 mysql4    15   0  546m 262m 3992 S 92.8  3.3  28:15.25 mysqld
 5701 www-data  16   0  188m  19m 4480 S  9.5  0.2   0:03.78 apache2
 5595 www-data  17   0  187m  18m 4408 S  5.7  0.2   0:04.87 apache2
 5945 www-data  15   0  185m  17m 4376 S  5.7  0.2   0:04.33 apache2
 6157 www-data  16   0  188m  19m 4556 S  5.7  0.2   0:04.03 apache2
Last edited by wiedervergessen2 on 2008-01-11 10:42, edited 1 time in total.

wiedervergessen2
Posts: 22
Joined: 2008-01-07 22:09

Re: apache2.conf bei 8 Gigabyte RAM

Post by wiedervergessen2 » 2008-01-11 10:36

Das hier scheint ganz interessant zu sein:

http://virtualthreads.blogspot.com/2006/01/tuning-apache-part-1.html

Now imagine what happens when 1,000 web clients try to access your web site at the same moment (e.g. when it first shows up on Slashdot). The first 150 clients will successfully connect to your web server, because Apache will create workers to service their requests. However, those web clients do not immediately leave; after they've downloaded your page, they will hold open their connections for 15 seconds until your server forces their connection to close. The next 850 clients will be unable to access the web server, as all of the available Apache worker processes will be used up, waiting for 15 seconds on the unused connections to the first 150 clients. Some of those 850 clients will queue up and wait for an available Apache process to service their request, but most will give up.

Perhaps some readers are wondering why you wouldn't just increase the MaxClients setting to something high enough to handle your peak load, like 2000 or something. This is a very bad idea; you can increase Apache's MaxClients, but only at your own peril. Because each Apache process consumes a bit of memory, you can only fit a certain number in memory before the web server begins to violently thrash, swapping things between RAM and the hard drive in a futile attempt to make it work. The result is a totally unresponsive server; by increasing MaxClients too high, you will have caused your own demise. I will talk about how to figure out a good value for MaxClients in a future post, but a good rule of thumb might be to divide your total RAM by 5 megabytes. Thus, a server with 512 megabytes of RAM could probably handle a MaxClients setting of 100. This is probably a somewhat conservative estimate, but it should give you a starting point.

wiedervergessen2
Posts: 22
Joined: 2008-01-07 22:09

Re: apache2.conf bei 8 Gigabyte RAM

Post by wiedervergessen2 » 2008-01-11 10:46

So, hab jetzt mal KeepAlive auf 2 Sekunden gesetzt und KeepAlive auf on:

top - 09:45:38 up 1:04, 2 users, load average: 5.02, 4.34, 3.29
Tasks: 695 total, 2 running, 693 sleeping, 0 stopped, 0 zombie
Cpu(s): 38.9% us, 8.6% sy, 0.0% ni, 51.8% id, 0.4% wa, 0.1% hi, 0.2% si
Mem: 8240616k total, 5168856k used, 3071760k free, 4148k buffers
Swap: 1959920k total, 0k used, 1959920k free, 1832464k cached


PID USER RES PR NI VIRT SHR S %CPU %MEM TIME+ COMMAND
3382 mysql4 262m 16 0 547m 3992 S 59.1 3.3 30:15.49 mysqld
14626 www-data 13m 15 0 180m 3116 S 10.9 0.2 0:00.42 apache2
15226 www-data 16m 16 0 183m 3536 S 10.9 0.2 0:00.53 apache2
14571 www-data 13m 16 0 180m 3116 S 8.9 0.2 0:00.47 apache2


Mal schauen was passiert....

rootsvr
Posts: 538
Joined: 2005-09-02 11:12

Re: apache2.conf bei 8 Gigabyte RAM

Post by rootsvr » 2008-01-11 13:50

Du hast wenn ich das sehe noch ein bischen Speicher über..

was sagt denn dasmysql Tuning script ? Ich denke mit mehr Verbindungen/cache Indexes im mysql wirst Du eher was erreichen, als die Apache Clients hochzusetzen (grade weil dein Apache-status ja zeigt das Du nur ein Bruchteil der Apache Kapazitäten belegst..)

Nutzt Du xcache, apc eAccelarator? Das bringt auch nochmal was.

wiedervergessen2
Posts: 22
Joined: 2008-01-07 22:09

Re: apache2.conf bei 8 Gigabyte RAM

Post by wiedervergessen2 » 2008-01-13 21:22

OK..sieht jetzt eher nach einem MySQL Problem aus...(-> MySQL Forum)

wiedervergessen2
Posts: 22
Joined: 2008-01-07 22:09

Re: apache2.conf bei 8 Gigabyte RAM

Post by wiedervergessen2 » 2008-01-14 00:01

Ist doch eine Apache2 Problem...ich muss Apache jetzt alle 2 Minuten neu laden...damit der Speicher wieder freigegeben ist :-(

braindead
RSAC
Posts: 257
Joined: 2002-10-22 09:49
Location: vorm Rechner

Re: apache2.conf bei 8 Gigabyte RAM

Post by braindead » 2008-01-14 03:55

Wie hoch sind deine MaxRequestsPerChild? Die sollten ja das Problem mit dem Memory Leak beheben.

Hast du mal überlegt auf FCGI und vielleicht Lighttpd umzusteigen?

Ich glaube übrigens immer noch das dein MySQL das Problem ist.

wiedervergessen2
Posts: 22
Joined: 2008-01-07 22:09

Re: apache2.conf bei 8 Gigabyte RAM

Post by wiedervergessen2 » 2008-01-14 10:37

MaxRequestsPerChild hatte werder für den Wert 100 noch für den Wert 10,000 eine Auswirkung gehabt.

Das Problem ist jetzt gerade gelöst worden.

Mein Bruder hat mir gerade den Prefork durch den Worker ersetzt und jetzt funktioniert alles wunderbar.

Die genaue Ursache ist immer noch schleierhaft.

Aber die Kurzzusammenfassung ist:

Prefork = scheisse
Worker = gut

Prefork = buggy
Worker = stabil

Prefork = Memory Leak
Worker = nix Memory Leak

djcrackman
RSAC
Posts: 208
Joined: 2005-06-02 11:58

Re: apache2.conf bei 8 Gigabyte RAM

Post by djcrackman » 2008-01-14 15:27

Das Problem ist bekannt und im Layer 8 zu suchen ... zur Information: das ist die Schicht zwischen Bildschirm und Sessellehne. Warum glaubst du eigentlich nicht, was dir andere Administratoren sagen? Selbst ein Prefork kann soviele Zugriffe wegstecken, da könntest du ohne Probleme etliche richtig große Seiten hosten.

wiedervergessen2
Posts: 22
Joined: 2008-01-07 22:09

Re: apache2.conf bei 8 Gigabyte RAM

Post by wiedervergessen2 » 2008-01-14 18:03

Wahrscheinlich macht Prefork nur Probleme, wenn man 2 Dual Cores verwendet und die falsche MySQL Version /mod_php oder einer bestimmen PHp Library..wie immer ist es wohl eine unglückliche Kombinationen einzelner (aktueller) Module...aber aus Zeitgründen möchte ich nur dass es so bald wie möglich wieder richtig läuft und ich habe nicht den Ehrgeiz im Moment alles bis ins kleinste Detail für einen Bug Report zu analysieren - aber wenn mal Zeit ist werde ich das eventuell machen.

Bei mehreren Prozessoren/Cores wird ja angeblich eh zum Worker geraten.
Last edited by wiedervergessen2 on 2008-01-14 18:09, edited 1 time in total.

wiedervergessen2
Posts: 22
Joined: 2008-01-07 22:09

Re: apache2.conf bei 8 Gigabyte RAM

Post by wiedervergessen2 » 2008-01-14 18:04

Es kann nicht an der Datenbank liegen...denn wenn ich in das Haupt PHP Skript "die()" einfüge steigt der RAM Verbrauch auch ---- nur sehr viel langsamer.