Wo geht die Performance drauf?

luco

Registered User
Hallo,
simples Problem mein Root ist etwas stark ausgelastet und ich versteh nicht ganz warum. Hardware: AMD Opteron 1210 Dualcore 2GB Ram, es liegen etwa nur 20 aktive Präsenzen drauf, wovon nur eine wirklich ordentlich Besucher aufweisen kann (Tag ~5000).

Wenn ich mir top anschaue frage ich mich warum diese wwwrun prefork sachen da drin sind mit so hohen Auslastungen:

Code:
top - 08:45:25 up 3 days, 14:32,  1 user,  load average: 7.74, 7.94, 7.95
Tasks: 106 total,   9 running,  97 sleeping,   0 stopped,   0 zombie
Cpu(s): 100.0% us,  0.0% sy,  0.0% ni,  0.0% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:   2044696k total,  1940092k used,   104604k free,    88936k buffers
Swap:  1052248k total,      512k used,  1051736k free,  1371468k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 5695 wwwrun    25   0  141m  12m 1332 R   34  0.6 180:01.30 httpd2-prefork
 8848 wwwrun    25   0  141m  12m 1408 R   33  0.6 175:27.10 httpd2-prefork
10055 wwwrun    25   0  141m  12m 1480 R   33  0.6 174:12.60 httpd2-prefork
18698 wwwrun    25   0  141m  12m 1236 R   27  0.6 169:05.44 httpd2-prefork
 2236 wwwrun    25   0  141m  12m 1232 R   26  0.6 189:32.94 httpd2-prefork
 8878 wwwrun    25   0  141m  12m 1180 R   24  0.6 175:20.36 httpd2-prefork
18921 wwwrun    25   0  141m  12m 1400 R   23  0.6 168:48.63 httpd2-prefork
    1 root      16   0   776  304  252 S    0  0.0   0:00.63 init
    2 root      RT   0     0    0    0 S    0  0.0   0:02.68 migration/0
    3 root      34  19     0    0    0 S    0  0.0   0:00.00 ksoftirqd/0
    4 root      RT   0     0    0    0 S    0  0.0   0:01.13 migration/1

Eigentlich düfte doch mein System nicht so stark ausgelastet sein oder?
Ok die Werte sind gerade auch sehr extrem, aber im Schnitt komm ich schon auf eine Load Average von knapp unter 2.
Es läuft der Apache, MySQL, PHP über Suphp eingebuden als CGI
Sonst nix großartiges.

Wisst ihr wo die Performance gefressen wird?
Vielen Dank für eure Hilfe
 
hast du mal mit strace geschaut welche Seiten in Aufgerufen werden wenn die Auslastung derart Hoch ist ?

Ich würde mal auf ein schlecht gecodetes PHP-Script tippen.
Läuft die "Dicke" Seite evtl. mit PHPNuke ? :D
 
Danke für deine Antwort.
Die dicke Seite läuft mit Typo3 und ein ganz gut frequentiertes Forum vbulletin.
Nachdem heute morgen die CPU Last bisherige Rekorde gebrochen hat (seit 0 Uhr konstant auf 7-8 Load Average, hab ich nun Mod_evasive wieder eingebaut und neugestartet. Nach dem Apache-Restart ist Load Average natürlich erstmal abgefallen auf 0.5 etwa was ich für morgens auch schon verhältnismäßig viel finde oder nicht? Habe da wenig Erfahrungswerte was so einen DualCore Webserver in die Knie zwingen kann. Die httpd2-prefork Einträge sind immerhin verschwunden und kommen nur kurz und bleiben nicht konstant laufend wie vor dem Restart. Wäre mal interessant Vergleichswerte zu sehen oder zu erfahren.
Ist eine Load Average von 0,5 bis 1 z.b. normal? Ich empfand das bislang nicht so, weil ich bevor die "dicke" Seite draufkam eigentlich kaum die 0,2 geknackt habe, was daran liegt das sonst nur "tote" Webseiten rumliegen.
 
ich würde dir mod Status empfehlen, dort siehst du schön was alles ausgeliefert wird und was requestet wird.

Zum anderen ist apache mpm worker für dual core Prozessoren ein wenig Leistungsfähiger.

Hast du die prefork Section entsprechend angepasst um 2 solch mächtige Seiten zu bedienen?

Eine Load zwischen 0.5 und 1 ist vollkommen in Ordnung, solange die Load unter 1 liegt, bedeutet das, dass der Server alle Anfragen noch in Realzeit bearbeitet. Bei über 1 kommt es zu verzögertem Ausführen.
 
Ok, mod_status werde ich mir mal einverleiben.
Je mehr Überwachung desto besser!

Gibt es genauere Anleitungen was man am Prefork ändern sollte für "dickere" Seiten? Habe nur mal etwas zur server-tuning.conf gefunden und dort versucht etwas zu verbessern.

Danke für deine Erklärung zum Load, das hat mich schon lange beschäftigt und im Internet gibt es sehr skurile Erklärungen was welche Angaben denn bedeuten sollen. Zu SrvReport war zu lesen, dass bis zu 1 dann vollauslastung gelten sollte. Aber entsprechend der Prozessoren ginge das höher, also DualCore wäre dann bei 2 erst richtig ausgelastet.
Also ist mein Durchschnittsload durchaus in Ordnung, aber die Frage bleibt ob das normal ist für eine etwas größere Seite schon ein recht gut bestückten Server zu verlangsamen, dann müssen ja richtige TopSites ganze Serverfarmen haben um die Auslastung hinzukriegen.
 
viele Topsites haben "Serverfarmen" genannt dann load balancing.

Poste doch mal die Section

<IfModule mpm_prefork_module>

<IfModule>
 
Meine server-tuning.conf:

Code:
<IfModule prefork.c>
	StartServers         5
	MinSpareServers      5
	MaxSpareServers     10
	ServerLimit        150
	MaxClients         150
	MaxRequestsPerChild  10000
</IfModule>

# worker MPM
<IfModule worker.c>
	StartServers         3
	MinSpareThreads     25
	MaxSpareThreads     75 
	ThreadLimit         64
	MaxClients         150
	ThreadsPerChild     25
	MaxRequestsPerChild  10000
</IfModule>

KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 1000



Wenn der Load nicht das größte Problem ist, wie verhält sich eure CPU(s) us?
Wenn ein paar Anfragen gleichzeitig reinkommen kann das schon mal auf 40% us kommen, möchte nur wissen ob das alles normale Werte sind für solch eine Hardware oder muss ich Konfigurationstechnisch etwas nachbessern? Kann Suphp über CGI so ausbremsen? Mir fehlen nur die Ideen wo ich ansetze
 
Last edited by a moderator:
suphp und php als cgi bremsen beide aus. Wenn man die Memorylimits von php so perfektioniert, dass diese zu den Webpräsenzen passen, dann hilft dies auch performance zu gewinnen.

Ansonsten setze ich meine prefork Section auf folgende Werte:

ServerLimit 500
MinSpareServers 20
MaxSpareServers 80
StartServers 32
MaxClients 500
MaxRequestsPerChild 1000

Das funktioniert ganz gut und senkt die load.
 
Back
Top