使用Upstart设置内存消耗限制

Mic*_*jen 19 process upstart limit memory-consumption

我最近非常喜欢Upstart.以前我一直在使用God,Monit和Bluepill,但我并不喜欢这些解决方案,所以我试试Upstart.

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

我通读了Upstart文档,看起来就像我正在寻找的东西.虽然我不知道如何配置这样的东西.

我基本上想要的很简单.web如果内存使用率为> 150mbram,我想重新启动我的进程.这些是我的文件:

|-- myapp-web-1.conf
|-- myapp-web-2.conf
|-- myapp-web-3.conf
|-- myapp-web.conf
|-- myapp.conf
Run Code Online (Sandbox Code Playgroud)

他们的内容是:

myapp.conf

pre-start script

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

end script
Run Code Online (Sandbox Code Playgroud)

MYAPP-web.conf

start on starting myapp
stop on stopping myapp
Run Code Online (Sandbox Code Playgroud)

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'
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢!

小智 10

将其追加到末尾myapp-web-*.conf会导致任何分配调用尝试分配多个150mb内存来返回ENOMEM:

limit rss 157286400 157286400
Run Code Online (Sandbox Code Playgroud)

此过程可能会崩溃,或者可能不会崩溃.这取决于这个过程!

这是Upstart Source中对此的测试.

  • 我最近试图实现这一点,并发现rss限制没有任何影响.来自`man 2 getrlimit`:"RLIMIT_RSS指定进程驻留集的限制(以页为单位)(驻留在RAM中的虚拟页面数).此限制仅在Linux 2.4.x中有效,x <30,并且只有影响对madvise的调用(2)指定MADV_WILLNEED." 我最终使用`limit as <soft> <hard>`,这导致我的失控过程接收到`ENOMEM`. (7认同)