除非未设置不活动超时,否则内存使用量永远不会下降

memory usage never go down unless inactivity-timeout not set

/etc/apache2/sites-enabled/myproject.conf 的一部分:

WSGIDaemonProcess myporject user=tester group=tester processes=2 threads=5 python-eggs=xxx display-name=xxx

当一个用户开始浏览该网站时,使用的内存增加了 80M(来自 free -m 的输出)并且即使用户注销并关闭浏览器,内存使用也不会下降,除非运行service apache2 restart。我试了worker modeprefork mode,但还是没有发布。

inactivity-timeout设置为60秒时,内存使用会在退出后60秒后下降。

我是 apache2 和 wsgi 配置的新手。我只是想知道设置 inactivity-timeout 是否是降低内存使用率的好方法?是否缺少任何其他重要配置?

欢迎任何意见。如果需要更多信息,请告诉我。谢谢

mod_wsgi 启动两个进程 运行 你的 Django 程序(实际上这两个进程 你的 Django 程序)。请求完成后,该过程将继续 运行,准备好处理新请求。

您提到的请求需要 80 MB 内存,因此 Python 从操作系统请求该内存量,操作系统将其提供给 Python。当请求完成时,大部分内存不再需要,并且未被使用。但是,Python 不会将其释放到操作系统。当 Python 再次需要内存时,它将重新使用这 80 MB。在大多数情况下,这种工作方式是令人满意的; Python 不释放内存不是问题,因为它会重新使用它,所以通常你不需要做任何事情。

inactivity-timeout 使 mod_wsgi 在 60 秒后重新启动进程,因此新进程尚未处理请求,因此不会消耗任何大量内存。

另见 Releasing memory in Python