当我为一个巨大的数据库生成报告时,我遇到了这个问题。我的应用程序是django的,当我点击这个从一个巨大的数据库生成报告的报告时,它会在很长一段时间内消耗大量的内存和CPU。但是,一旦报告生成完成,它仍然不会释放内存,因此我的服务器显示了一些问题。实际上,我没有使用任何类型的过滤器来限制获取的记录数量。因此,它会获取所有记录并尝试生成报告。这无疑会消耗大量的内存和CPU。有什么建议吗?
发布于 2011-08-31 00:16:27
请考虑使用mod_wsgi而不是mod_python。mod_python在apache进程中创建python解释器。这可能会导致大量的内存积压。在mod_wsgi上托管更容易,看看django on apache with mod_wsgi吧。另一个原因可能是您声明了全局变量并将其分配给巨大的报告数据,这阻止了python垃圾收集器释放内存。考虑通过应用一些filters来减少数据集,考虑使用日期限制进行报告。清除缓存由于数据集很大,垃圾收集器可能没有释放它。
发布于 2011-08-31 08:16:33
您可以看到运行中的正常进程行为。当内存由进程分配时,它通常不会被释放回操作系统,而当空闲时,只会返回到实际进程的空闲列表中。对于某些内存分配器和较新版本的Python有一些例外,即如果内存空间顶部的连续内存块被释放,则可以将其返回到操作系统,因此不再计入进程。不过,这是个例外。
您最好在一个单独的进程中执行耗费大量内存的操作,该进程可以在完成时终止。
https://stackoverflow.com/questions/7229609
复制相似问题