Jor*_*ein 9 ruby parallel-processing memory-leaks mongodb
我在循环中使用Twitter,Mongo和Parallel来检索和存储数据.
内存利用率达到1.5GB +
GC怎么不清洗这个?
更新: 这是有问题的脚本.
allocated memory by location
-----------------------------------
973409328 /Users/jordan/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/timeout.rb:82
359655091 /Users/jordan/.rvm/gems/ruby-2.1.5/gems/json-1.8.3/lib/json/common.rb:155
34706221 /Users/jordan/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/openssl/buffering.rb:182
31767589 /Users/jordan/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http/response.rb:368
22055648 /Users/jordan/.rvm/gems/ruby-2.1.5/gems/parallel-1.6.1/lib/parallel.rb:183
12129637 /Users/jordan/.rvm/gems/ruby-2.1.5/gems/addressable-2.3.8/lib/addressable/uri.rb:525
11115133 /Users/jordan/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/protocol.rb:172
10609088 /Users/jordan/.rvm/gems/ruby-2.1.5/gems/addressable-2.3.8/lib/addressable/idna/pure.rb:177
8333448 /Users/jordan/.rvm/gems/ruby-2.1.5/gems/twitter-5.15.0/lib/twitter/base.rb:152
6041744 /Users/jordan/.rvm/gems/ruby-2.1.5/gems/thread_safe-0.3.5/lib/thread_safe/non_concurrent_cache_backend.rb:8
4857232 /Users/jordan/.rvm/gems/ruby-2.1.5/gems/addressable-2.3.8/lib/addressable/uri.rb:1477
4583920 /Users/jordan/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/monitor.rb:241
4524872 /Users/jordan/.rvm/gems/ruby-2.1.5/gems/memoizable-0.4.2/lib/memoizable/method_builder.rb:117
4282752 /Users/jordan/.rvm/gems/ruby-2.1.5/gems/twitter-5.15.0/lib/twitter/base.rb:151
4200641 /Users/jordan/.rvm/gems/ruby-2.1.5/gems/mongo-2.1.1/lib/mongo/monitoring/command_log_subscriber.rb:104
3283047 /Users/jordan/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http/response.rb:61
3150696 /Users/jordan/.rvm/gems/ruby-2.1.5/gems/mongo-2.1.1/lib/mongo/server/monitor.rb:125
allocated memory by gem
-----------------------------------
1084770550 ruby-2.1.5/lib
359655091 json-1.8.3
53016839 addressable-2.3.8
22069048 parallel-1.6.1
18422826 twitter-5.15.0
10829988 mongo-2.1.1
8908392 memoizable-0.4.2
6041744 thread_safe-0.3.5
4904294 faraday-0.9.2
3839455 other
3382080 naught-1.1.0
2429320 bson-3.2.6
1123917 rubygems
320962 rollbar-2.4.0
205097 activesupport-4.2.4
20005 multi_json-1.11.2
Run Code Online (Sandbox Code Playgroud)
Ruby 内存管理既优雅又麻烦。它将对象(名为RVALUEs)存储在大小约为 16KB 的所谓堆中。在低层次上,RVALUE是一个c-struct,包含不同标准 ruby 对象表示的联合。
因此,堆存储RVALUE对象,其大小不超过40字节。对于诸如String、Array等对象Hash,这意味着小对象可以放入堆中,但一旦它们达到阈值,就会在 Ruby 堆之外分配额外的内存。
这个额外的内存是灵活的;一旦对象成为 GC\xe2\x80\x99ed,它就会被释放。但堆本身不再发布到操作系统。
\n\n也就是说,一旦您同时将许多短字符串加载到 ruby 内存中,堆数量就会增加,并且该内存永远不会返回到 ruby。这可能听起来很奇怪,但请尽量不要存储少于 23 个符号的字符串。太疯狂了,抱歉这个提议:)
\n\n这也可能有帮助:http ://www.sitepoint.com/ruby-uses-memory/
\n| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |