2014-11-05 89 views
0

这里机械化内存泄漏是一个示例脚本再现问题尽管历史大小设置为0和清除历史

require 'mechanize' 

agent = Mechanize.new 
agent.history.max_size = 0 

5000.times do |i| 
    agent.get('http://www.yahoo.com') 
    agent.history.clear 

    p `ps -o rss -p #{$$}`.strip.split.last.to_i * 1024 # Prints out memory usage of the ruby process 
end 

我这样做既agent.history.max_sizeagent.history.clear但似乎内存使用与每个循环增加。

以下是输出显示增加的内存使用情况(从48MB开始,每个循环增加1-2MB)。

48603136 
50274304 
51470336 
53260288 
54984704 
55836672 
56799232 
57884672 
59150336 
60358656 
61349888 
62193664 
... 

如何获得机械化来停止内存泄漏?

+0

如果您在每次迭代中创建新代理而不是多次重复使用相同代理,行为是否会改变? – spickermann 2014-11-05 10:02:29

+0

没有变化,仍然看到与上述内存大小相同的增加。 – 2014-11-05 10:13:13

回答

2

这不是内存泄漏,有些东西还没有被加密。把:

GC.start 

在循环,如果你觉得你需要它,否则它可能是安全的忽略。

+0

谢谢。将'GC.start'放在循环的末尾可以解决问题。 – 2014-11-06 08:45:37