1 votes

Django + apache2, chaque utilisateur prend beaucoup de mémoire

Je lance mon application django sur apache2 (avec mpm prefork) avec une base de données mysql. Tout fonctionne bien, sauf lorsque plusieurs utilisateurs l'utilisent, et chaque utilisateur prend environ 40-45m RES.

httpd.conf:

WSGIScriptAlias / /home/myproject/apache/django.wsgi
Alias /blog /var/www/blog/
Alias /maintain_wp_database/phpmyadmin_secure /usr/share/phpmyadmin

django_wsgi:

import os
import sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

path2 = '/home'
if path2 not in sys.path:
sys.path.append(path2)

path = '/home/myproject'
if path not in sys.path:
sys.path.append(path)

fichier de configuration:

ServerName myproject.com
    ServerAlias www.myproject.com
    #
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www\.myproject\.com
    RewriteRule (.*) http://myproject.com$1 [R=301,L] 
    #
        DocumentRoot /home

    WSGIScriptAlias / /home/myproject/apache/django.wsgi

    Order deny,allow
    Allow from all

        Options FollowSymLinks
        AllowOverride None

    Alias /static/ /home/myproject//static/
    Alias /robots.txt /home/myproject/templates/robots.txt
    Alias /favicon.ico /home/myproject/static/images/favicon.ico

    AliasMatch ^/([^/]*\.css) /home/myproject/styles/$1

    Alias /media/ /home/myproject/media/

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all

    Order allow,deny
    Allow from all

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined

apache2.conf:

KeepAlive On
Timeout 300
MaxKeepAliveRequests 100
KeepAliveTimeout 15

    StartServers        5
    MinSpareServers     5
    MaxSpareServers     10
    MaxClients          150
    MaxRequestsPerChild 0

sortie de top:

top - 11:24:10 up 3 days,  1:08,  3 users,  load average: 0.00, 0.01, 0.05
Tasks: 140 total,   1 en cours, 134 en attente,   5 arrêté,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1011248k total,   491532k utilisé,   519716k libre,    11380k buffers
Swap:   262140k total,   119884k utilisé,   142256k libre,   127244k mis en cache

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMANDE           
 7678 www-data  20   0  228m  42m 6812 S    0  4.3   0:01.16 apache2            
 7665 www-data  20   0  232m  41m 4956 S    0  4.2   0:00.75 apache2            
 7676 www-data  20   0  212m  40m 4628 S    0  4.1   0:00.27 apache2            
 7956 www-data  20   0  230m  39m 4416 S    0  4.0   0:00.65 apache2            
 7677 www-data  20   0  230m  39m 4452 S    0  4.0   0:00.69 apache2            
 7667 www-data  20   0  224m  36m 4836 S    0  3.7   0:00.48 apache2            
 2539 mysql     20   0  321m  28m 2584 S    0  2.9   0:12.32 mysqld             
 7661 root      20   0  181m 9772 4588 S    0  1.0   0:00.12 apache2            
 7724 www-data  20   0  183m 9412 2228 S    0  0.9   0:00.01 apache2            
 7666 www-data  20   0  183m 9360 2240 S    0  0.9   0:00.01 apache2            
 7668 www-data  20   0  183m 9108 2108 S    0  0.9   0:00.00 apache2            
 7981 www-data  20   0  183m 8596 1768 S    0  0.9   0:00.00 apache2            
 4645 root      20   0 71120 3580 2532 S    0  0.4   0:00.07 sshd               
 7993 root      20   0 70664 3296 2556 S    0  0.3   0:00.02 sshd     

Dois-je optimiser mes paramètres de configuration ou est-ce un problème de fuite de mémoire (peut-être quelque chose de mal dans le code?). En raison de chaque utilisateur prenant 40-45m (est-ce normal??) dans apache, la plupart de la mémoire de mon linode de 1 Go est consommée très rapidement. Toute aide à ce sujet serait la bienvenue! Merci

0voto

Nathan C Points 14821

Essayez de réduire le MaxSpareServers à environ 5 et le MinSpareServers à 1. Cela réduira le nombre de processus Apache. Environ 40 Mo est normal dans Apache. Cette configuration est optimale pour un serveur à faible mémoire :

StartServers 1 MinSpareServers 1 MaxSpareServers 5 ServerLimit 50 MaxClients 50 MaxRequestsPerChild 5000

0voto

Jason Points 8799

Lire :

et regarder :

En résumé. N'utilisez pas mod_wsgi en mode embarqué avec Apache si vous utilisez le MPM prefork, à moins de savoir comment configurer correctement Apache pour les applications web Python.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X