ruby-on-rails - 从 Rails on Heroku 下载流式 ZIP 文件会导致内存使用量增加
问题描述
我正在使用zipline生成和流式传输 ZIP 文件作为浏览器下载。ZIP 生成和下载同时发生。一切都按预期运行,但随着文件的下载,Heroku 似乎使用了越来越多的内存。内存消耗的增加通常接近但没有下载的 zip 文件那么大。ZIP 是压缩的,但内容已经高度压缩,所以我认为这种差异不是由此造成的。不断触发重新下载同一个 ZIP 确实会反复增加内存使用量,但它似乎会逐渐减少。
没有被动内存泄漏,但至少就 Heroku 报告而言,很明显这个进程的某些内容需要更多内存并且似乎从未将其释放给操作系统(?)。
过去 24 小时:
最后2小时:
Heroku 报告的 Ruby 指标:
实际上,内存使用图的每一次急剧增加都会触发 ZIP 下载。我改用 1GB 内存而不是 512MB 的测功机,看看它是否有帮助或释放内存,但没有。
Ruby 空闲内存槽和堆对象似乎根本没有改变。我不知道这是否是 Heroku 上的 beta 指标插件的缺陷,但我不知道如何调查。
zipline gem 使用 ZipTricks 作为后端,我已经直接重新实现了我已经使用 ZipTricks 完成的操作,并发现了完全相同的问题。
解决方案
https://github.com/schneems/puma_worker_killer你为什么不试试这个?即使执行内存释放,内存碎片似乎也会继续。
推荐阅读
- python - 在图像上添加/读取标签 Python
- microsoft-information-protection - MIP SDK 1.10.97 以 -1073740791 静默退出
- python - 如果键存在,则添加嵌套字典的值
- python - 具有多列的数据框的不同聚合
- java - 如何在使用 camera2 api 录制时向视频添加自定义过滤器
- email - 电子邮件模板 | 在主题上方插入自定义 HTML 块
- vue.js - 在构建部署到 S3 后获取环境变量是 Vuejs
- android - 使用改造时如何更新 RecyclerView?
- powerbi - PowerBI DAX Measure 不拾取行
- c - 如何在C中打印指向哪个指针成员的值