限制进程的 RAM 数量(Linux)

限制进程的 RAM 数量(Linux)

我有一个 Zope 服务器(只是一个长时间运行的 Python 进程),它往往会在几天后耗尽我服务器上的所有 RAM。我不想每晚都重新启动它 - 也许最好限制此进程的 RAM,看看它是否可以正常工作。

那么,我该如何限制此过程使用的 RAM 不超过 256MB?

服务器是一台运行 Centos 5.3 的 64 位 Intel 机器。我听说过 ulimit 可以限制 bash 进程,但是如何限制 python 进程呢?

更新:

谢谢你的想法!我将使用混合方法解决我的问题:

  • 我将使用 ulimit 启动该服务,这样它只能使用 256MB RAM
  • 由于我的系统由 Nagios 监控,我将使用 nagios-check 命令来验证我的进程使用的内存不超过 192MB。
  • 如果我的进程使用超过 192MB,那么将自动启动平滑重启。
  • 如果我的进程使用超过 220MB 或者进程根本不运行,则会通过短信/电子邮件通知管理员(我自己),因此我将手动处理该问题。

这样一来,我想我就比较安全了:需要时自动平稳重启(通过 nagios),并在 RAM 使用量突然达到峰值时强制停止服务(通过 ulimit)

答案1

ulimit 就像一把锤子,当进程达到极限时,它会强制杀死该进程。

您可能需要一些不那么激进的东西。(可以正常重启的东西)看看 monit。 http://mmonit.com/monit/

这是 zope 的一个示例配置。 http://mmonit.com/wiki/Monit/ConfigurationExamples#zope

查看使用 mem 或 totalmem 选项来触发重启。

祝你好运。

答案2

resource模块是 Python 中的 等效项ulimit

答案3

其他回复者似乎已经了解您的主要问题,但在我看来,您的问题似乎是治标不治本。为什么应用程序内存泄漏如此严重?如果您能找到原因,那么限制就没有必要了。

答案4

使用Cgroups限制内存。

cgroup 将内存限制为可配置的数量,而不是像 ulimit 那样的硬锤。它不会因 OOM 而终止进程。它会将进程所需的剩余内存分页到磁盘。

相关内容