ActiveJob 多跑几个后,sidekiq 内存飙高,然后内存占用 100%,宕机。
优先查看用过 C、C++ 实现的 Gem,查查它们是否有内存泄漏风险;
Sidekiq / Ruby 本身是没有内存泄漏的,已经有大量且计算量巨大的 Sidekiq 案例在生产环境,并且跑很多年。
实测两天,配置是用了 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
Rails 版本是多少?Rails 6 么? 如果是 Rails 6 的话,把 Rails 版本换成 5(比如:5.2), 试试还会不会出问题呢? 之前遇到过 Rails 6 貌似会出现这样的问题...
The First Rule of Programming: It's Always Your Fault https://blog.codinghorror.com/the-first-rule-of-programming-its-always-your-fault/