2010-03-03 5 views
4

Je développe un site web django qui utilise mod_wsgi pour la production - il n'y a presque pas de visiteurs donc à chaque fois que je le visite, mod wsgi démarre et ouvre les processus python - il faut environ 1-2 minutes entières pour le charger complètement.mod_wsgi trop lent au démarrage?

Y at-il quelque chose que je pourrais faire pour ne pas ralentir au démarrage initial? Est-ce un problème courant ou pourrait-il s'agir d'un problème avec ma configuration?

Répondre

6

Cela ne devrait pas prendre autant de temps, même si vous avez utilisé une configuration sous-optimale d'utilisation du mode intégré et d'Apache prefork MPM. Cependant, vous pourriez aggraver les choses si vous aviez MaxRequestsPerChild à 1 pour les processus Apache. Les suggestions sont, assurez-vous que vous utilisez le mode démon mod_wsgi et exécutez avec un seul processus multithread (les paramètres par défaut pour WSGIDaemonProcess). Cela garantira au moins qu'il n'y a qu'une seule instance de Django et pas potentiellement une instance par processus de serveur Apache. Pour confirmer ce que vous êtes en train de faire, éditez votre question et postez un extrait de votre configuration actuelle d'Apache montrant comment configurer les bits mod_wsgi. Indiquez également si vous utilisez Apache prefork ou worker MPM, déterminable en exécutant 'httpd -V' et quelle plate-forme vous utilisez.

BTW, avez-vous essayé un simple programme WSGI Hello World pour valider votre installation? Voir 'http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide'. Et avez-vous essayé avec un site Django vide, plutôt que votre vrai pour voir si ce sont vos changements?

0

Juste un peu plus de lumière à ce sujet. Vous ne voulez pas utiliser la période MPM prefork, cela entraînera un processus 1x mod_wsgi pour chacun des processus pré-fourchus.

La meilleure façon de surmonter cela est d'exécuter le processus WSGI en mode démon avec le MPM du worker.

https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/#using-mod-wsgi-daemon-mode

Edit:

Notez également que vous devez spécifier le groupe autrement chaque processus httpd semblait créer son propre processus de mod_wsgi après toutes les connexions ont été fermées.

WSGIScriptAlias ​​/ /usr/local/apache2/htdocs/ABC.com/build/wsgi.py WSGIPassAuthorization On WSGILazyInitialization Off WSGIDaemonProcess processus abc.com utilisateur = groupe apache = apache display-name =% {GROUPE} = 1 threads = 256 WSGIProcessGroup ABC.com

+0

Également mentionné dans ce blog http://blog.dscpl.com.au/2012/10/why-are-you-using-embedded-mode-of. html et cette vidéo https://www.youtube.com/watch?v=k6Erh7oHvns –