我们有一个服务器正在运行
- Sidekiq 4.2.9
- 导轨 4.2.8
- 核磁共振 2.1.9
该服务器定期从外部 API 生成一些导入,对它们执行一些计算并将这些值保存到数据库中。
大约 3 周前,服务器开始挂起,正如我从 NewRelic 看到的(以及当 ssh'ed 到它时) - 随着时间的推移,它消耗越来越多的内存,最终占用所有可用的 RAM,然后服务器挂起。
我已经阅读了一些关于 ruby GC 如何工作的文章,但仍然无法理解,为什么在 ~5:30 AM 堆大小从 ~2.3M 跳到 3M 时,仍然有 1M 可用的可用堆槽(GC 设置是默认值)
所以,问题是:
- 如何让 Ruby 填充空闲堆槽而不是从操作系统请求新槽?
- 如何让它向系统释放空闲的堆槽?