我从一家数据供应商那里使用RestClient下载了大约75张图片和40页详细信息。
步骤如下:
步骤如下:
- 验证供应商服务并将Cookie保存在变量中
- 下载XML文件
- XML文件包含大约40个资产。
- 对于每个资产,下载图像列表。(每个资产的图像数量在0-10之间)
- 下载图像。
Total allocated: 1165532095 bytes (295682 objects)
Total retained: 43483 bytes (212 objects)
使用memory_profiler
gem测量。下载大约150mb的数据需要超过1gb的内存?
我的主要担忧是,我需要下载更多的数据 - 这只是15天数据中的其中1天。当我运行2天的数据时,下载大小和内存大小翻倍。当运行3天的数据时,翻三倍等等。甚至看起来内存消耗呈指数级增长,直到我的服务器内存不足并崩溃。
为什么这里垃圾回收没有启动?我尝试在每次下载数据之间运行GC.start
,这可以欺骗memory_profiler
,但当我添加太多数据天数时,我的服务器仍然会崩溃。
所以我的问题是:
- 为什么内存消耗与我实际下载的数据相比如此之高。
- 由于我在每次下载之间覆盖保存下载数据的变量,那么垃圾回收是否应该清除以前下载的数据的内存?
- 有什么技巧可以降低内存消耗吗?
示例代码:
使用RestClient: https://gist.github.com/mtrolle/96f55822122ecabd3cc46190a6dc18a5
使用HTTParty: https://gist.github.com/mtrolle/dbd2cdf70f77a83b4178971aa79b6292
谢谢