Rails请求worker内存消耗



我正在使用一个resque gem来处理我的后台进程。

我设置了三个队列,每个队列有一个worker。

谁能解释一下队列中worker的增加和减少是如何消耗内存的?

我听说每个worker加载单独的Rails环境。这是真的吗?

据我所知,是的,每个worker启动一个单独的Rails环境,因此,如果您有三个worker,则将加载三个Rails环境。拥有更多的工人并不会让你的排队变长,而是等待的工作岗位数量会让排队变长。

无论哪种方式,如果你没有任何主要的理由有3个单独的工人,我建议你只有一个工人为所有队列,并分开它们作为你的应用程序随着时间的推移。

这不是真的。正如我在这里的评论中解释的那样,Resque的确切目标不是为每个worker加载rails环境(参见https://github.com/blog/542-introducing-resque)。

由于ruby的green trheading解决方案的限制,您应该为每个处理器内核至少启动一个worker,以便能够使用整个CPU。这就是为什么Resque的默认行为是在单独的进程中启动每个worker。这意味着同时启动N个并行进程,每个进程都独立加载完整的宝石集。这是Resque和其他Ruby工具占用大量内存的主要原因。您可以在这里看到,使用JVM的本机线程可以使事情变得更好。

所以,如果你想保持你的Resque内存使用下降保持你的工人依赖尽可能低。使用像God或Bluepill这样的监控工具来密切关注这个过程是非常重要的。

最新更新