我一直在使用 Puma 在 4GB VPS 上运行 rails 应用程序。我有 activejob(With Suckerpunch Backend),它从数据库表中提取 2,500,000 行的数据并进行一些计算并将结果写入另一个表中。activejob 进程在执行过程中消耗大约 3GB 的 RAM,大约需要 15 分钟才能完成。
问题是在activejob完成后,内存并没有释放回操作系统,而puma保留了内存,这使得我们无法在不重新启动puma的情况下运行新的activejob。如果我们重新启动 puma,RAM 就会被释放。
我们可以在每次 activejob 完成时重新启动 puma 服务,但我希望有一些更有效的方法来克服这个问题。