ruby-on-rails-3 – Rails – 循环卷发请求进食记忆
我使用gem Curb(也尝试使用httparty)来执行大量的http请求,这很有效.但在我的一个(rake)任务中(我做了20k请求)我有一个内存问题(Rails“吃掉”超过2GB的RAM,直到没有空闲内存为止).
似乎Rails“不等待”响应并继续循环中的另一个线程,问题是以这种方式会创建很多垃圾收集器未收集的对象(我认为)并且是内存泄漏的原因. 有一种方法可以告诉rails等到响应来了吗? (我试着睡觉,但不是一个稳定的解决方案). 我有这样的伪代码: def the_start while start_date <= end_date do # ~ 140 loop a_method_that_do_sub_specifics_call end end def a_method_that_do_sub_specifics_call some_data.each do |r| # ~ 180 loop do_a_call #do something with models (update/create entries,...) end end def do_a_call # called ~ 25k times # with the gem Curb version req = Curl::Easy.new do |curl| curl.ssl_verify_peer = false curl.url = url curl.headers['Content-type'] = 'application/json' end req.perform # actual version,with httparty gem req = HTTParty.get("#{url}",:headers => {'Content-type' => 'application/json'}) end 似乎Rails不等待req.perform的结果. 编辑: 编辑2 编辑3 解决方法
经过几天的调试,阅读了大量的论坛和帖子,我找到了解决方案:
一个适度的类变量字符串,它会一直增长,直到发生内存泄漏. 我在旅行中获得的一些有用的笔记: 遏制与HTTParty 注意类变量 @status = "#{@status} Warning - response is empty for #{description}n" 执行一些手动垃圾收集 调用ActiveRecords数组 Model.find_each(:batch_size => 50) do |row| 这每次只执行50(或小于默认值)行的查询,比调用1k行的单个查询更好. (我猜默认的batch_size是1000). 有用的链接: > http://guides.rubyonrails.org/performance_testing.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c# – 使用webapi和引导日期选择器绑定angularjs
- C#实现字符串首字母大写的方法示例
- PostgreSQL学习第十二篇 服务的启停和创建
- ruby – 如果没有arg则运行stdin的脚本;否则输入
- #OOD#Parking Lot停车场设计
- objective-c – 方法[[UIDevice currentDevice]
- ruby-on-rails – 我在哪里放置Act-as-taggable-
- Caused by: org.xml.sax.SAXParseException; lin
- Oracle 9 – 重置序列以匹配表的状态
- c# – 如何删除级联底部的实体 – > EF中的非级联