我正在开发一个django网站,生产使用mod_wsgi - 几乎没有任何访问者,所以任何时候我访问它似乎mod wsgi启动并打开python进程 - 它需要大约1-2整分钟才能完全加载
我有什么可以做的,不要让它在初次启动时变慢?这是一个常见问题,还是仅仅是我的配置问题?
答案 0 :(得分:6)
即使您使用嵌入模式和Apache prefork MPM的次优配置,也不应该花那么长时间。但是,如果您将Apache进程的MaxRequestsPerChild设置为1,则可能会使事情变得更糟。
建议是,确保使用mod_wsgi守护程序模式并使用单个多线程进程运行(WSGIDaemonProcess的默认设置)。这将至少确保只有一个Django实例,而不是每个Apache服务器进程可能只有一个实例。
作为对您正在做的事情的确认,编辑您的问题并发布当前Apache配置的片段,显示如何设置mod_wsgi位。还包括您是否使用Apache prefork或worker MPM,可通过运行'httpd -V'以及您正在使用的平台来确定。
顺便说一下,您是否尝试过一个简单的hello world WSGI程序来验证您的安装?请参阅“http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide”。你有没有试过一个空的Django网站,而不是真正的网站,看看它是否是你的变化?答案 1 :(得分:0)
对此更加清楚。您不希望使用prefork MPM期间,它将为每个预分叉进程导致1x mod_wsgi进程。
解决此问题的最佳方法是使用worker MPM以守护进程模式运行WSGI进程。
https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/#using-mod-wsgi-daemon-mode
编辑:
另请注意,您必须指定组,否则每个HTTPD进程似乎都会在所有连接关闭后创建自己的mod_wsgi进程。
WSGIScriptAlias / /usr/local/apache2/htdocs/ABC.com/build/wsgi.py WSGIPassAuthorization On WSGILazyInitialization关闭 WSGIDaemonProcess ABC.com user = apache group = apache display-name =%{GROUP} processes = 1 threads = 256 WSGIProcessGroup ABC.com