首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Upstart设置内存消耗限制

使用Upstart设置内存消耗限制
EN

Stack Overflow用户
提问于 2011-06-07 22:35:50
回答 2查看 4.7K关注 0票数 19

我最近变得非常喜欢Upstart。之前我一直在使用上帝,Monit和Bluepill,但我并不是真的喜欢这些解决方案,所以我正在尝试Upstart。

我一直在使用Foreman gem为我的/etc/init进程生成一些基本的Upstart配置文件。但是,这些生成的文件仅处理崩溃进程的重新生成。我想知道是否有可能告诉Upstart重启一个消耗> 150mb内存的进程,就像Monit、上帝或Bluepill一样。

我通读了一下Upstart docs,发现this看起来就是我要找的东西。虽然我不知道如何配置这样的东西。

我基本上想要的很简单。如果内存使用量是> 150mb内存,我想重新启动web进程。以下是我拥有的文件:

代码语言:javascript
复制
|-- myapp-web-1.conf
|-- myapp-web-2.conf
|-- myapp-web-3.conf
|-- myapp-web.conf
|-- myapp.conf

它们的内容是:

myapp.conf

代码语言:javascript
复制
pre-start script

bash << "EOF"
  mkdir -p /var/log/myapp
  chown -R deployer /var/log/myapp
EOF

end script

myapp-web.conf

代码语言:javascript
复制
start on starting myapp
stop on stopping myapp

myapp-web-1.conf / myapp-web-2.conf / myapp-web-3.conf

代码语言:javascript
复制
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'

任何帮助都非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-09 08:41:06

将其附加到myapp-web-*.conf的末尾将导致任何尝试分配超过150mb内存的分配调用返回ENOMEM

代码语言:javascript
复制
limit rss 157286400 157286400

进程可能会在这一点崩溃,也可能不会。这取决于流程!

Here's a test for this in the Upstart Source

票数 10
EN

Stack Overflow用户

发布于 2016-06-02 16:59:38

在Upstart文档中,限制来自rlimit系统调用选项。(http://upstart.ubuntu.com/cookbook/#limit)

由于Linux 2.4+设置rss (驻留集大小)没有任何影响。

在其他答案中已经建议的替代方案是as,它设置虚拟内存地址空间大小限制。这将具有与设置“真实”内存限制截然不同的效果。

代码语言:javascript
复制
limit as <soft limit> <hard limit>

setrlimit手册页摘录:

RLIMIT_AS进程的虚拟内存(地址空间)的最大大小,以字节为单位。此限制会影响对brk(2)、mmap(2)和mremap(2)的调用,这些调用在超过此限制时会失败,并显示错误ENOMEM。此外,自动堆栈扩展将失败(并生成SIGSEGV,如果没有通过sigaltstack(2)提供替代堆栈,则会终止进程)。由于该值为long,因此在具有32位长度的计算机上,此限制最多为2 GiB,或者此资源不受限制。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6266882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档