PDA

Bekijk Volledige Versie : Hoge serverload



Pjom
21/04/09, 09:21
Hey,

Ik heb problemen met mijn server op het moment. Het gaat hierbij over een VPS machine met 2 GB RAM en 4 cores van 2.5 Ghz.

Het probleem is dat mijn site traag wordt en zijn gehele geheugen + SWAP gaat gebruiken. Ik heb al een aantal avonden gezocht maar tot op heden niets gevonden.

Het is een PHP applicatie icm een Postgres Database.

Misschien dat deze printscreen jullie wat meer info kan verstrekken.
http://img522.imageshack.us/img522/9625/serverload.jpg

Alvast bedankt

Arh
21/04/09, 09:29
apache2 heeft erg veel processen, als ik jou was zou ik eens naar de config van je apache gaan kijken en dan met name naar Timeout, MaxKeepAliveRequests, KeepAliveTimeout, MinSpareServers, MaxClients. Voor meer informatie over die termen verwijs ik naar apache: http://people.apache.org/

Als je weinig bezoekers hebt is dit namelijk niet echt normaal, als je er veel bezoekers hebt kan het nog wel kloppen en kan het dus ook zijn dat je server het aantal visitors gewoon niet meer aankan.

Pjom
21/04/09, 09:31
Nja zelf heb ik er niet zo heel veel verstand van vandaar mijn vraag ook hier. Het volgende staat tevens in de config /etc/apache2/apache2.conf



#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 300

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15

##
## Server-Pool Size Regulation (MPM specific)
##
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>

Arh
21/04/09, 09:36
Ik zou beginnen met de volgende waarden:
Timeout 60
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 10

en kijken of dat helpt. Mocht dat niet helpen dan zullen de gedeeltes van prefork MPM en worker MPM bekeken moeten worden. Mocht dat ook niet helpen dan is de kans dat het aan apache ligt klein en zal er dus ergens anders een probleem zijn.

Verder zou ik op de huidige apache processes letten om te zorgen dat die ook echt verdwijnen na verloop van tijd(als dat niet gebeurd killen en kijken of de nieuw gestarte apache processes wel verdwijnen, dit echter alleen doen als je weinig bezoekers hebt).

Heb je veel of weinig bezoekers op je site(<10 op een dag of >1000 op een dag)?

mikeh
21/04/09, 09:37
Hop, een berg info voor je;

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

JMB
21/04/09, 09:43
KeepAliveTimeout 1


Hiermee maak je keepalive redelijk nutteloos.

Ook is op de ss te zien dat de apache processen cpu gebruiken. Dit zijn dan lijkt mij geen processen die in de keep alive status zitten ;)

mikeh
21/04/09, 09:48
Dan kun je het net zo goed uit zetten :)

Pjom
21/04/09, 09:51
Ja ik heb zojuist KeepAlive uitgezet :)

Gaat hier om een site met zo'n 100.000 unieke bezoekers per maand

wonko
21/04/09, 09:53
ik zou de keepalive aanhouden, en de timeout laag zetten (5 tot 10 seconden). Verder lijkt het erop dat er een slecht/intensief script loopt, en lang loopt. Je zal moeten zoeken welk script dit is (kijk bvb naar het inschakelen de status-handler van apache, zodat je het kan zien welke url precies gehit wordt, of ga je logfiles na).

Pjom
21/04/09, 09:57
Ik heb zojuist xcache installed en heb ik de beschikking over server-status echter zie ik er op het moment nog niets vreemds aan.

Via IRC zei me iemand dat ik KeepAlive best uit kon zetten namelijk. Heb er zelf nauwelijks verstand van dus heb graag hulp hierbij :)

Arh
21/04/09, 09:59
Hiermee maak je keepalive redelijk nutteloos.

Ook is op de ss te zien dat de apache processen cpu gebruiken. Dit zijn dan lijkt mij geen processen die in de keep alive status zitten ;)

Helemaal gelijk in en was een type fout. Veranderd in 10, dat vind ik persoonlijk een goede instelling omdat mensen binnen 10 seconden vaak gezien hebben of ze op de pagina willen blijven of niet, zoja dan nemen ze vaak meer tijd, zo nee dan zijn ze binnen 10 sec. door naar de volgende pagina.

Verder heb je gelijk dat ze CPU gebruiken, dit zou kunnen betekenen dat een script(query?) "veel" tijd nodig heeft om te voltooien aangezien sommige processen ook rond de 8 seconden zitten.(maar ik kan het ook fout hebben aangezien ik ook niet geweldig veel kennis hierover heb ;))

Edit: ik zie dat wonko eigenlijk alles al gezegd heeft wat ik ook wou zeggen

Pjom
21/04/09, 10:05
Hmmm hoe zorg ik nu dat mn domain.tld/server-status het goed doet.
Op het moment triggert ZendFramework hem als error page.

wonko
21/04/09, 10:09
Hmmm hoe zorg ik nu dat mn domain.tld/server-status het goed doet.
Op het moment triggert ZendFramework hem als error page.

De juiste module aanzetten, ExtendedStatus aanzetten en apache herladen. Lees even de documentatie door...

Pjom
21/04/09, 10:12
Nja hij staat aan namelijk



ExtendedStatus On

<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 62.131.41.249
Allow from localhost ip6-localhost
# Allow from .example.com
</Location>



En mijn vhost van mn domein ziet er als volgt uit:



[quote]
<VirtualHost fear.fm:80>

DocumentRoot /home/domains/fearfm.nl/www/website/main/public/
ServerName fear.fm
ServerAlias fearfm.nl www.fearfm.nl fear.fm www.fear.fm fearfm.be www.fearfm.be hard.fear.fm harder.fear.fm hardest.fear.fm
Alias /phppgadmin /usr/share/phppgadmin/
Alias /phpsysinfo /usr/share/phpsysinfo
<Directory /home/domains/fearfm.nl>
AllowOverride All
Options FollowSymLinks MultiViews
</Directory>
ErrorLog /home/domains/fearfm.nl/logs/error_log
CustomLog /home/domains/fearfm.nl/logs/access_log combined
</VirtualHost>

wonko
21/04/09, 10:15
Heb je apache herladen?

Pjom
21/04/09, 10:17
Jips, als ik mijn bootstrap file en htaccess weghaal doet die het ook. Alleen moet zo toch ook werken?


EDIT:
Heb even mijn index offline gehaald om in de server-status te komen van apache met het volgende resultaat:
http://img8.imageshack.us/img8/4053/serverstatus.jpg

dreamhost_nl
21/04/09, 17:58
Is dat de server status op een moment dat de server load hoog is?
Ziet er m.i. nl. vrij normaal uit.

Pjom
22/04/09, 09:21
Ja hij draait nu wel stable :) Denk dat het door XCache komt icm met de KeepAlive disabled.

Load blijft laag en RAM usage ligt rond de 68%. Verder heeft hij iets van 38 requests/sec op zijn piekuren.

Weet niet of dit veel is?