Rails Sidekiq 内存泄漏

zengfengbo · December 17, 2019 · Last by zengfengbo replied at January 11, 2020 · 4452 hits

ActiveJob 多跑几个后,sidekiq 内存飙高,然后内存占用 100%,宕机。

代码贴一下

优先查看用过 C、C++ 实现的 Gem,查查它们是否有内存泄漏风险;

Sidekiq / Ruby 本身是没有内存泄漏的,已经有大量且计算量巨大的 Sidekiq 案例在生产环境,并且跑很多年。

任务中是否有外部请求并大量超时

Reply to IChou

@IChou 请问为什么外部请求超时会导致泄露内存?

实测两天,配置是用了 2 个进程,每个进程 4 线程。 每次跑完定时 Job 就内存飙升,重启之后又回复正常。 最初出现问题也是在当我把 sidekiq 从 1 进程 1 线程改为多进程多线程的时候。 后面还是在线程里面再开进程解决问题。代码如下: 来源出自某个网页,忘了链接了。

class ApplicationJob < ActiveJob::Base
  # added for sidekiq memory leak
  include Process
  around_perform do |_job, block|
    pid = fork do
      block.call
    end
    waitpid(pid)
  end
end
Reply to huacnlee

怀疑是阿里云的 oss ruby gem 线程不安全。

Reply to IChou

有外部请求,延时问题应该没有。

sidekiq-worker-killer

Rails 版本是多少?Rails 6 么? 如果是 Rails 6 的话,把 Rails 版本换成 5(比如:5.2), 试试还会不会出问题呢? 之前遇到过 Rails 6 貌似会出现这样的问题...

Reply to Rei

嗯,应该是我的问题。我目前用这个方法暂时规避了这个问题。

You need to Sign in before reply, if you don't have an account, please Sign up first.