我有Apache
++mod_wsgi
应用Django
程序。mod_wsgi
以守护程序模式运行。
我有一个视图,它从数据库中获取重要的查询集,并通过计算查询集的结果另外分配数组,然后返回这个数组。我没有使用线程本地存储、全局变量或类似的东西。
问题是我的应用程序占用的内存相对于我为 mod_wsgi 设置的线程数。
我通过在 mod_wsgi 中设置不同数量的线程然后通过 curl 检查 wsgi 进程可以内存爬升多远来达到我的视图,进行了小实验。
它是这样的:
1 个线程 - 256Mb 2 个线程 - 400Mb 3 个线程 - 535Mb 4 线程 - 650Mb
所以每个线程在最高内存使用量上增加了大约 120-140Mb。
我似乎永远不会释放为第一个请求分配的初始内存。在单线程场景中,当第二个请求(对同一视图)到达时,它会被重用。这样我就可以离开了。
但是当我使用多个线程时,当请求由以前从未运行过此请求的线程处理时,该线程会在本地某处“保存”另外 140mb。
- 如何解决这个问题?
- 可能 Django 在 TSL 中保存了一些数据。如果是这种情况,我该如何禁用它?
- 或者,作为一种解决方法,是否可以将请求执行绑定到某个线程
mod_wsgi
?
谢谢。
PS。DEBUG
在中设置为 Falsesettings.py