除非未设置inactivetivity-timeout,否则内存使用率永远不会下降

时间:2016-12-12 16:09:03

标签: django apache wsgi django-wsgi

/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的输出),即使用户注销并关闭浏览器,内存使用率也不会下降,除非运行{ {1}}。我尝试了service apache2 restartworker mode,但仍未发布。

prefork mode设置为60秒时,注销后内存使用率将下降60秒。

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

欢迎任何评论。如果需要更多信息,请告诉我。感谢

1 个答案:

答案 0 :(得分:0)

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

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

inactivity-timeout使mod_wsgi在60秒后重启进程,因此新进程尚未提供请求,因此不会占用大量内存。

另见Releasing memory in Python