我有一个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应用程序中正确监控这个,或者我错了吗?
我的问题是:如何在这种情况下监控我的内存使用情况?
答案 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