sidekiq何时结束进程,从而释放内存?

时间:2016-07-14 07:50:22

标签: multithreading ruby-on-rails-4 heroku memory-leaks sidekiq

从我知道Ruby的内部工作方式来看,只有完成后才会释放内存。

我正在调试一个很长时间运行的sidekiq Heroku进程,内存问题,我正试图弄清楚后台进程的界限。

所以...说我有使用3个线程的sidekiq,它一次运行3个工作,我总共有100个工作。这意味着它可能永远不会在工作之间休息吧?这是否意味着在完成所有100个工作之前不会释放内存?我假设是的,直到100完成才会发布。

但是我说切换到1个线程,100个作业相继运行。现在每个工作都是自己的流程,还是sidekiq将所有这100个排队的工作视为一个单独的流程(即使它一次只运行一个)?

如果是这样......有没有办法让每个工作都有自己独立的过程,在完成后释放内存?

1 个答案:

答案 0 :(得分:1)

Ruby使用垃圾收集来回收内存。它会比你想象的更快地释放内存。另请参阅https://github.com/mperham/sidekiq/wiki/Problems-and-Troubleshooting#memory-bloat