具有多个守护进程的Apache mod_wsgi内存缓存

时间:2019-06-25 14:16:36

标签: python django apache django-rest-framework mod-wsgi

我有一个相当大的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内存池。

0 个答案:

没有答案