我从数据供应商处使用RestClient下载约75张图像+ 40页详细信息。
是这样的:
通过115个唯一请求,我在37.58秒内的总下载大小为148.14Mb。我的内存消耗是:
Total allocated: 1165532095 bytes (295682 objects)
Total retained: 43483 bytes (212 objects)
以memory_profiler
宝石测量。要下载约150mb的数据,刚好超过1gb的内存?
我最担心的是,我需要下载更多数据-这只是15天的数据中的1天。当我运行2天的数据时,下载大小和内存大小增加了一倍。运行3天的数据时,我的数据会增加三倍,等等。甚至看起来内存消耗呈指数增长,直到内存用完并且服务器崩溃为止。
为什么垃圾回收不在这里启动?我尝试在每天下载的数据之间运行GC.start
,这很有趣memory_profiler
,但是当我添加过多的数据时,服务器仍然会崩溃。
所以我的问题是:
版本::Ruby: 2.4.4p296 ,RestClient: 2.0.2 ,操作系统: Ubuntu 16.04 < / p>
示例代码:
使用RestClient:https://gist.github.com/mtrolle/96f55822122ecabd3cc46190a6dc18a5
使用HTTParty:https://gist.github.com/mtrolle/dbd2cdf70f77a83b4178971aa79b6292
谢谢
答案 0 :(得分:2)
我认为这全都与您使用的http客户端有关:Rest-Client
。不幸的是,它因渴望记忆而享有一定的声誉。您绝对应该寻找同时具有内存/时间效率功能的超棒宝石。
我强烈推荐HTTP.rb或其http / 2后继者HTTPX
要获得良好的基准,请查看另一篇很棒的宝石Shrine:https://twin.github.io/httprb-is-great/
的作者撰写的这篇很棒的文章版本: Ruby:2.5.3p105,HTTP.rb:4.0.0,操作系统:Ubuntu 16.04
总下载量:96.92Mb (通过118个唯一请求)。
内存消耗:
Total allocated: 7107283 bytes (83437 objects)
Total retained: 44221 bytes (385 objects)
因此,它在下载 96.92Mb 时仅分配了 7Mb ,而使用Rest-Client大约为1Gb。
以下是代码段:https://gist.github.com/mtrolle/96f55822122ecabd3cc46190a6dc18a5#gistcomment-2774405