2010-10-31 28 views
1

J'ai une installation OSQA (python/django q & une application) desservant 8 sites différents. Les sites sont tous en développement, recevant un trafic minimal. Le serveur est un serveur privé virtuel avec 512 Mo de RAM. Apache ne sert que des pages dynamiques avec mod_wsgi derrière Nginx. Je ne peux pas empêcher Apache de consommer de plus en plus de mémoire avec chaque requête jusqu'à ce que le serveur s'étouffe.Empreinte mémoire OSQA apache

J'ai expérimenté avec les paramètres de configuration sans trop de chance pour minimiser l'empreinte mémoire. Avec les paramètres de mpm_prefork suivants apache2.conf:

StartServers   2 
MinSpareServers  1 
MaxSpareServers  4 
MaxClients   4 
MaxRequestsPerChild 100 

2 processus apache commencent à utiliser 4 mb et après la première demande il y a 4 processus avec chacun près de 50 mb et avec chaque nouvelle demande les 4 processus grimpent de façon constante jusqu'à près de 200 mb chacun. Je sens qu'il y a quelque chose qui ne va pas. Toutes les suggestions sont grandement appréciées.

Répondre

1
KeepAlive Off 
MaxSpareThreads 3 
MinSpareThreads 1 
ServerLimit 3 
SetEnvIf X-Forwarded-SSL on HTTPS=1 
ThreadsPerChild 2 

WSGIDaemonProcess osqaWSGI processes=2 python-path=/web/osqa_server:/web/osqa_server/lib/python2.6 threads=1 maximum-requests=550 
WSGIProcessGroup osqaWSGI 

Ran httperf contre cela avec 10 000 appels simultanés et il était toujours debout.

+0

vouliez-vous dire MinSpareServers au lieu de MinSpareThreads? parce que MinSpareThreads n'est pas reconnu. – omat

+0

Cela dépend si vous travaillez avec prefork ou un travailleur. MinSpareServers signifie que vous utilisez Prefork. Voir http://www.camelrichard.org/apache-prefork-vs-worker –

+0

merci, il semble mieux maintenant. Pourtant, je suis un peu confus. Après avoir ajouté la partie WSGIDaemonProcess, il y a maintenant 4 processus dès le départ. est-ce que les processus = 2 ont sth lié au nombre de processeurs? quel serait l'optimum pour une machine à 4 processeurs? – omat