首页 > 解决方案 > 从 Rails on Heroku 下载流式 ZIP 文件会导致内存使用量增加

问题描述

我正在使用zipline生成和流式传输 ZIP 文件作为浏览器下载。ZIP 生成和下载同时发生。一切都按预期运行,但随着文件的下载,Heroku 似乎使用了越来越多的内存。内存消耗的增加通常接近但没有下载的 zip 文件那么大。ZIP 是压缩的,但内容已经高度压缩,所以我认为这种差异不是由此造成的。不断触发重新下载同一个 ZIP 确实会反复增加内存使用量,但它似乎会逐渐减少。

没有被动内存泄漏,但至少就 Heroku 报告而言,很明显这个进程的某些内容需要更多内存并且似乎从未将其释放给操作系统(?)。

过去 24 小时:

过去 24 小时内存使用情况

最后2小时:

最近 2 小时内存使用情况

Heroku 报告的 Ruby 指标:

heroku ruby​​ 内存指标

实际上,内存使用图的每一次急剧增加都会触发 ZIP 下载。我改用 1GB 内存而不是 512MB 的测功机,看看它是否有帮助或释放内存,但没有。

Ruby 空闲内存槽和堆对象似乎根本没有改变。我不知道这是否是 Heroku 上的 beta 指标插件的缺陷,但我不知道如何调查。

zipline gem 使用 ZipTricks 作为后端,我已经直接重新实现了我已经使用 ZipTricks 完成的操作,并发现了完全相同的问题。

标签: ruby-on-railsrubyherokumemory-managementdownload

解决方案


https://github.com/schneems/puma_worker_killer你为什么不试试这个?即使执行内存释放,内存碎片似乎也会继续。


推荐阅读