我使用Passenger + Apache运行Ruby on Rails应用程序。 还有一个运行mod_perl的perl邮件列表服务器(Sympa)。
我有root和sh访问服务器(一台Ubuntu机器)。
大多数时候它运行得很好; 该服务器有足够的内存和磁盘空间来处理工作量。
但是有时候(也许每三个月左右一次),一些Apache进程似乎“stream氓”,开始消耗内存和CPU疯狂。 结果,网站崩溃了(有时我不得不做冷重启,只重启Apache是不够的)。 我已经做了一些testing,似乎挂起的进程是Ruby进程,这让我怀疑Passenger是错过了。
这里是最后一次“停电”(刚刚发生)的一些Munin图表,
我对Ruby的过程(Passenguer)持怀疑态度。 但是,我不能确定触发“狂野过程”的条件(我只是主持应用程序,我没有开发它)。 虽然这样会很好,但“杀死悬挂的过程”可能会更简单。
我想知道是否有办法“自动杀死”需要占用太多内存或CPU的进程。 有没有处理这个问题的Apache模块或configuration标志?
编辑:到目前为止,我已经尝试了Apache的RLimitCPU,RLimitMEM和RLimitNPROC无济于事 – 它似乎乘客是不受这些设置。 我很确定这个问题是现在的乘客,所以我重新标记和重写这个问题的一部分。
ulimits(通过/etc/security/limits.confconfiguration,或者只是通过运行ulimit之前,排除可能有问题的二进制文件)可能是解决这个问题的方法。