我最近变得非常喜欢Upstart。之前我一直在使用上帝,Monit和Bluepill,但我并不是真的喜欢这些解决方案,所以我正在尝试Upstart。
我一直在使用Foreman gem为我的/etc/init
进程生成一些基本的Upstart配置文件。但是,这些生成的文件仅处理崩溃进程的重新生成。我想知道是否有可能告诉Upstart重启一个消耗> 150mb
内存的进程,就像Monit、上帝或Bluepill一样。
我通读了一下Upstart docs,发现this看起来就是我要找的东西。虽然我不知道如何配置这样的东西。
我基本上想要的很简单。如果内存使用量是> 150mb
内存,我想重新启动web
进程。以下是我拥有的文件:
|-- myapp-web-1.conf
|-- myapp-web-2.conf
|-- myapp-web-3.conf
|-- myapp-web.conf
|-- myapp.conf
它们的内容是:
myapp.conf
pre-start script
bash << "EOF"
mkdir -p /var/log/myapp
chown -R deployer /var/log/myapp
EOF
end script
myapp-web.conf
start on starting myapp
stop on stopping myapp
myapp-web-1.conf / myapp-web-2.conf / myapp-web-3.conf
start on starting myapp-web
stop on stopping myapp-web
respawn
exec su - deployer -c 'cd /var/applications/releases/20110607140607; cd myapp && bundle exec unicorn -p $PORT >> /var/log/myapp/web-1.log 2>&1'
任何帮助都非常感谢!
发布于 2011-06-09 08:41:06
将其附加到myapp-web-*.conf
的末尾将导致任何尝试分配超过150mb
内存的分配调用返回ENOMEM
limit rss 157286400 157286400
进程可能会在这一点崩溃,也可能不会。这取决于流程!
发布于 2016-06-02 16:59:38
在Upstart文档中,限制来自rlimit
系统调用选项。(http://upstart.ubuntu.com/cookbook/#limit)
由于Linux 2.4+设置rss (驻留集大小)没有任何影响。
在其他答案中已经建议的替代方案是as,它设置虚拟内存地址空间大小限制。这将具有与设置“真实”内存限制截然不同的效果。
limit as <soft limit> <hard limit>
setrlimit手册页摘录:
RLIMIT_AS进程的虚拟内存(地址空间)的最大大小,以字节为单位。此限制会影响对brk(2)、mmap(2)和mremap(2)的调用,这些调用在超过此限制时会失败,并显示错误ENOMEM。此外,自动堆栈扩展将失败(并生成SIGSEGV,如果没有通过sigaltstack(2)提供替代堆栈,则会终止进程)。由于该值为long,因此在具有32位长度的计算机上,此限制最多为2 GiB,或者此资源不受限制。
https://stackoverflow.com/questions/6266882
复制相似问题