【问题标题】:Memory not released by python cherrypy application on linuxlinux上的python cherrypy应用程序未释放内存
【发布时间】:2010-07-20 14:03:55
【问题描述】:

我有一个长时间运行的进程,它将从数据库中获取 100k 行,生成一个网页,然后释放所有小对象(列表、元组和字典)。在 Windows 上,每次请求后都会释放内存。但是,在linux上,服务器的内存一直在增长。

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

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

有没有其他方法可以解决这个问题,而不必编译我自己的使用 tcmalloc 的 python 版本。这个选项将很难做到,因为 python 是由系统管理员控制的。

【问题讨论】:

  • 这是 glibc 的一个“特性”,独立于 Python。 Windows 分配器以不同的方式工作,因此您会得到不同的行为。

标签: python memory cherrypy tcmalloc


【解决方案1】:

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

首先您应该确认 tcmalloc 解决方案可以解决您的问题并且不会对您的应用程序的性能产生太大影响

【讨论】:

  • 我猜我的用法很常见,而且不是唯一的。必须有一种方法可以使用现有的 python 分配器,以便它可以将内存释放回操作系统。
  • @Sad,您需要确认链接中描述的问题与您的问题相同。虽然内存可能不会返回给操作系统,但至少应该在解释器内部释放它以用于后续请求。如果您看到内存不断增长,也许您的问题有所不同
  • 我已经确认这是同一个问题。我使用了 python 中可用的几个内存分析选项并且找不到任何内存泄漏,但程序的内存大小一直在增长。此外,内存可以在解释器内部重用,问题仅限于 linux。所有这一切,再加上我的 usecse 与原始帖子相同(分配大量对象)然后释放它们,这让我很舒服,我的问题与帖子中概述的相同。
猜你喜欢
  • 1970-01-01
  • 2013-08-27
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
  • 2017-11-02
  • 1970-01-01
  • 2010-09-26
相关资源
最近更新 更多