我有一些 HTTP 请求会导致大量内存使用(使用 mod-wsgi 运行 Python Django 应用程序)。我的问题是这些进程似乎闲置了一段时间。
有没有办法告诉 apache 杀死一个消耗了 X 兆内存的空闲进程?该请求已成功处理。
不,目前没有。您可以做的是将具有大量临时内存使用量的特定 URL 委托给单独的 mod_wsgi 守护进程组,该进程组上设置了不活动超时,以便如果对该 URL 的请求不频繁,则当该进程不用于同时它将重新启动进程并回收内存。如果没有足够长的不活动时间来触发不活动超时,您可以改为使用最大请求数并根据请求数每隔一段时间对其进行回收。
WSGIDaemonProcess main processes=3 threads=5
WSGIDaemonProcess memory-hungry-1 threads=5 inactivity-timeout=60
WSGIDaemonProcess memory-hungry-2 threads=5 maximum-requests=20
WSGIProcessGroup main
WSGIApplicationGroup %{GLOBAL}
</Location /memory/hungry/url-1>
WSGIProcessGroup memory-hungry-1
</Location>
</Location /memory/hungry/url-2>
WSGIProcessGroup memory-hungry-2
</Location>
换句话说,垂直划分您的 WSGI 应用程序以跨多个守护进程组运行。这允许您以匹配应用程序特定部分所需的方式自定义进程/线程和其他守护程序特定设置。