从我知道Ruby的内部工作方式来看,只有完成后才会释放内存。
我正在调试一个很长时间运行的sidekiq Heroku进程,内存问题,我正试图弄清楚后台进程的界限。
所以...说我有使用3个线程的sidekiq,它一次运行3个工作,我总共有100个工作。这意味着它可能永远不会在工作之间休息吧?这是否意味着在完成所有100个工作之前不会释放内存?我假设是的,直到100完成才会发布。
但是我说切换到1个线程,100个作业相继运行。现在每个工作都是自己的流程,还是sidekiq将所有这100个排队的工作视为一个单独的流程(即使它一次只运行一个)?
如果是这样......有没有办法让每个工作都有自己独立的过程,在完成后释放内存?
答案 0 :(得分:1)
Ruby使用垃圾收集来回收内存。它会比你想象的更快地释放内存。另请参阅https://github.com/mperham/sidekiq/wiki/Problems-and-Troubleshooting#memory-bloat