Rails应用程序中的内存使用情况,如何监控和排除故障?

时间:2013-12-13 01:38:46

标签: ruby-on-rails memory-management

我有一个Rails应用程序,其中包括几个计算成本高的后台作业(图像处理:O)。

我正在使用Sidekiq来管理这些工作。我目前已经为每个Sidekiq进程设置了5个线程的并发,这是我为了查看内存使用情况而做的事情:

ps faux | grep sidekiq

结果如下:

hommerzi    3874  3.5  5.7 287484 231756 pts/5   Sl+  17:17   0:10  |   \_ sidekiq 2.17.0 imageparzer [3 of 3 busy]

但是,我觉得必须有一种方法可以在Rails应用程序中正确监控这个,或者我错了吗?

我的问题是:如何在这种情况下监控我的内存使用情况?

1 个答案:

答案 0 :(得分:1)

我的建议是使用Monit(或上帝)来管理您的流程。这适用于数据库,服务器,应用程序;不只是后台工作。

以下是一个示例:Monit Ruby on Rails Sidekiq

监视您的应用程序一段时间并设置实际的内存限制。然后,如果您的某个进程在给定的周期数(通常为2分钟检查)内死亡或超过该限制,它将(重新)启动该进程。

您还可以设置警报电子邮件地址和网络前端(使用基本HTTP身份验证)。这对于在生产中运行稳定的应用程序至关重要。例如,最近我有一个sidekiq进程被自己带走并咀嚼250mb内存。然后Monit重新启动了这个过程(现在正在徘徊在150mb左右)并向我发出警报。现在我可以检查日志/系统,看看为什么会发生这种情况。这一切都发生在我睡着的时候。比备选方案好多了:通过失控的过程或失败的服务醒来并找到服务器。

https://www.digitalocean.com/community/articles/how-to-install-and-configure-monit