sidekiq内存使用重置

时间:2015-09-03 11:54:33

标签: ruby-on-rails ruby sidekiq

我有Rails应用程序,它使用Sidekiq进行后台处理。要部署此应用程序,我使用capistrano,ubuntu服务器和apache乘客。要启动并重新启动Sidekiq,我使用capistrano-sidekiq gem。 我的问题是 - 当Sidekiq运行时,Sidekiq使用的内存量(RAM)正在增长。当Sidekiq完成所有进程(工作人员)时,它会持续保留大量RAM并且不会重置它。

else

如何让Sidekiq在工人完成工作后重置已用内存?

1 个答案:

答案 0 :(得分:8)

Sidekiq使用线程来执行作业。 并且线程与父进程共享相同的内存。 因此,如果一个作业使用大量内存,Sidekiq进程内存使用量将会增长并且不会被Ruby发布。

Resque使用另一种技术来执行另一个进程中的每个作业,因此当作业完成时,作业的进程退出并释放内存。

防止Sidekiq进程占用太多内存的一种方法是使用Resque的分叉方法。

您可以让您的作业主方法在另一个进程中执行,并等待该新进程退出

前:

class Job
  include Process

  def perform
    pid = fork do
      # your code
    end
    waitpid(pid)
  end
end
相关问题