我有一个相当大的Django REST Framework API WSGI网站,具有60,000个端点。它将部署到运行带有Python 3.6.8和mod_wsgi
4.6.2的Apache 2.4.6的服务器。我实现了一些技巧(例如延迟加载模型),这些技巧使其变得非常快。唯一的例外是它首次发布时:每当我们向集成或生产环境发布新版本时,大约需要两分钟的时间来启动。这对我们很好,因为随后的页面加载几乎是即时的。我认为这是因为Django项目的元素(例如用于60,000个端点的URL分派器)被缓存在内存中。
但是,如果我将processes
的值更改为默认值1
以外的任何值,则每个页面的加载时间约为2分钟。这是我当前VirtualHost
配置的相关部分:
<VirtualHost *:443>
TimeOut 600
ServerName mysite-develop.wharton.upenn.edu
# Set to the GLOBAL Application Group
WSGIApplicationGroup %{GLOBAL}
# Pass Authorizations through to the WSGI app for Django REST Framework Token Auth
WSGIPassAuthorization On
WSGIDaemonProcess mysite-develop-https processes=1 python-home=/var/django/mysite/sites/mysite-develop/venv request-timeout=600 user=mysite group=mygroup
WSGIProcessGroup mysite-develop-https
WSGIScriptAlias / /var/django/mysite/sites/mysite-develop/config/wsgi.py process-group=mysite-develop-https
<Directory /var/django/mysite/sites/mysite-develop/config>
Require all granted
</Directory>
</VirtualHost>
有什么方法可以利用运行多个WSGIDaemonProcess
的内存缓存的优势吗?我对这种情况为什么会发生的假设是正确的吗?
随着发布后的初始过程开始,我可以在top
中观察该过程,直到完成为止,并保留了约3.4 GB的内存。这对于提高速度是可以接受的,我只想说有两个WSGIDaemonProcess
,每个都有自己的3.4 GB内存池。