我有一个Zope服务器(只是一个长期运行的Python进程),这往往会耗尽我的服务器上的所有内存几天后。 我不想每天晚上重新启动它 – 也许最好限制这个进程的内存,看看它是否可以正常工作。
那么,如何限制这个过程使用不超过256MB的内存?
该服务器是运行Centos 5.3的64位Intel机器。 我听说ulimit限制一个bash进程,但我怎么能限制它为一个python进程?
更新:
感谢您的想法! 我将使用混合的方法来解决我的问题:
这样,我想我是在安全的一面:当需要(通过nagios)自动平稳重启,并强制服务停止(通过ulimit),以防内存使用突然高峰
ulimit是一个锤子。 当它达到极限时,将很难杀死这个进程。
你可能想要更不积极的东西。 (这是一个优雅的重新启动)看看monit。 http://mmonit.com/monit/
这里是一个zope的configuration示例。 http://mmonit.com/wiki/Monit/ConfigurationExamples#zope
看看使用mem或totalmem选项来触发你的重启。
祝你好运。
resource模块是ulimit的Python等价物。
其他响应者似乎有你的主要问题,但对我而言,你所要求的似乎是治疗症状,而不是原因。 为什么应用程序泄漏内存如此糟糕? 如果你能跟踪下来,限制并不是真的需要。
由于ulimit影响shell及其subprocess,因此如果可行的话,可以尝试从另一个(ulimit-ed)shell启动Python进程。
使用Python将是类似的东西
subprocess.Popen('ulimit -v 262144; python_application', shell=True)
使用Cgroups来限制内存。
cgroup将内存限制在一个可configuration的数量,并不像ulimit这样的硬锤。 这不会OOM杀死进程。 它会将进程所需的其余内存分页到磁盘。