2010-07-20 104 views
2

我有一个长时间运行的进程,它将从数据库中提取100k行生成一个网页,然后释放所有小的objets(列表,元组和字典)。在Windows上,在每次请求后,内存都被释放。 Howerver在Linux上的服务器内存不断增长。linux上的python cherrypy应用程序未释放内存

以下帖子描述了问题所在以及一种可能的解决方案。

http://pushingtheweb.com/2010/06/python-and-tcmalloc/

是否有任何其他方式来解决这个问题,而不必编译它使用tcmalloc我自己的Python版本。这个选项将很难做到,因为python是由sys管理员控制的。

+0

这是glibc的一个“特色”,独立的Python。 Windows分配器以不同的方式工作,所以你会得到不同的行为。 – 2010-07-20 23:08:50

回答

0

您可能可以在自己的工作目录中编译Python,而不是尝试让sysadmin替换系统Python。

首先,你应该确认tcmalloc解决方案解决了您的问题,并不会影响性能太多应用

+0

我猜我的用法很常见,并不是唯一的。必须有一种方法可以使用现有的python分配器,以便将内存释放回操作系统。 – Sad 2010-07-20 14:41:18

+1

@Sad,您需要确认链接中描述的问题与您的问题相同。虽然内存可能不会返回到操作系统,但它仍应至少在解释器内部释放以用于后续请求。如果你看到内存增长并增长,或许你的问题不同 – 2010-07-20 14:45:56

+0

我已经证实这是同样的问题。我已经使用了python中的几个内存分析选项,并且找不到任何内存泄漏,但程序的内存大小不断增长。此外,内存可以在解释器内部重用,问题仅限于Linux。所有这一切与我的usecse与原始帖子(分配大量对象)相同的事实相结合,然后将它们全部释放,这让我很舒服,我的问题与帖子中概述的相同。 – Sad 2010-07-20 14:56:33

相关问题