【发布时间】:2023-03-19 21:25:01
【问题描述】:
我正在开发一个用于生产的 django 网站,它使用 mod_wsgi - 几乎没有任何访问者,所以无论何时我访问它似乎 mod wsgi 都会启动并打开 python 进程 - 它需要大约 1-2 分钟才能完全加载.
有什么办法可以不让它在初始启动时变慢吗?这是一个常见问题还是只是我的配置问题?
【问题讨论】:
标签: python django apache2 mod-wsgi
我正在开发一个用于生产的 django 网站,它使用 mod_wsgi - 几乎没有任何访问者,所以无论何时我访问它似乎 mod wsgi 都会启动并打开 python 进程 - 它需要大约 1-2 分钟才能完全加载.
有什么办法可以不让它在初始启动时变慢吗?这是一个常见问题还是只是我的配置问题?
【问题讨论】:
标签: python django apache2 mod-wsgi
即使您使用了使用嵌入式模式和 Apache prefork MPM 的次优配置,也不会花费那么长时间。不过,如果您将 Apache 进程的 MaxRequestsPerChild 设置为 1,可能会使事情变得更糟。
建议是,确保您使用 mod_wsgi 守护程序模式并使用单个多线程进程运行(WSGIDaemonProcess 的默认设置)。这将确保至少有一个 Django 实例,而不是每个 Apache 服务器进程可能有一个。
作为对您正在做的事情的确认,编辑您的问题并发布您当前 Apache 配置的 sn-p,展示如何设置 mod_wsgi 位。还包括您使用的是 Apache prefork 还是 worker MPM,可通过运行“httpd -V”以及您使用的平台来确定。
顺便说一句,您是否尝试过一个简单的 hello world WSGI 程序来验证您的安装?请参阅“http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide”。您是否尝试过使用一个空的 Django 站点,而不是您的真实站点来查看是否是您的更改?
【讨论】:
对此有更多的了解。您不想使用 prefork MPM 周期,这将导致每个 pre-fork 进程的 1x mod_wsgi 进程。
解决这个问题的最好方法是使用工作 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 开启 WSGILazy初始化关闭 WSGIDaemonProcess ABC.com 用户=apache 组=apache 显示名称=%{GROUP} 进程=1 线程=256 WSGIProcessGroup ABC.com
【讨论】: