乘客 – “自动杀”stream氓程序?

我使用Passenger + Apache运行Ruby on Rails应用程序。 还有一个运行mod_perl的perl邮件列表服务器(Sympa)。

我有root和sh访问服务器(一台Ubuntu机器)。

大多数时候它运行得很好; 该服务器有足够的内存和磁盘空间来处理工作量。

但是有时候(也许每三个月左右一次),一些Apache进程似乎“stream氓”,开始消耗内存和CPU疯狂。 结果,网站崩溃了(有时我不得不做冷重启,只重启Apache是​​不够的)。 我已经做了一些testing,似乎挂起的进程是Ruby进程,这让我怀疑Passenger是错过了。

这里是最后一次“停电”(刚刚发生)的一些Munin图表,

  • 每周的CPU使用情况
  • 乘客内存消耗量按周计算
  • Apache每天处理

我对Ruby的过程(Passenguer)持怀疑态度。 但是,我不能确定触发“狂野过程”的条件(我只是主持应用程序,我没有开发它)。 虽然这样会很好,但“杀死悬挂的过程”可能会更简单。

我想知道是否有办法“自动杀死”需要占用太多内存或CPU的进程。 有没有处理这个问题的Apache模块或configuration标志?

编辑:到目前为止,我已经尝试了Apache的RLimitCPU,RLimitMEM和RLimitNPROC无济于事 – 它似乎乘客是不受这些设置。 我很确定这个问题是现在的乘客,所以我重新标记和重写这个问题的一部分。

ulimits(通过/etc/security/limits.confconfiguration,或者只是通过运行ulimit之前,排除可能有问题的二进制文件)可能是解决这个问题的方法。