我为大型数据库生成报告时遇到此问题。我的应用程序在django中,当我点击这个从大型数据库生成报告的报告时,它会消耗大量内存和CPU很长一段时间。但是,一旦报告生成完成,它仍然不释放内存,因此我的服务器显示一些问题。实际上,我没有使用任何类型的过滤器来限制提取的记录数。因此,它获取所有记录并尝试生成报告。这肯定会占用大量内存和CPU。有什么建议吗?
答案 0 :(得分:2)
请考虑使用mod_wsgi
代替mod_python
。 mod_python
在apache进程中创建python解释器。这可能导致囤积大量内存。它更容易在mod_wsgi上托管,看看django on apache with mod_wsgi。另一个原因可能是你已经声明了全局变量并将其分配给庞大的报表数据,这可以防止python垃圾收集器释放内存。考虑通过应用一些filters
来减少数据集,考虑使用日期约束进行报告。清除缓存,因为数据集很大,垃圾收集器可能没有释放它。
答案 1 :(得分:0)
您正在看到正常的流程行为。当进程分配内存时,它通常不会释放回操作系统,并且只有空闲时才会返回到实际进程的空闲列表。对于某些内存分配器和较新版本的Python,有一些例外,如果内存空间顶部的连续内存块被释放,它可以返回到操作系统,因此不会计入任何进程更多。这是例外。
你可能最好在一个单独的进程中执行内存昂贵的操作,可以在完成时终止。