下面是一个重现问题的脚本示例

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
...

如何使机械化以阻止内存泄漏?

最佳答案

这不是内存泄漏,有些东西还没有被gc'ed。放置:

GC.start

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

关于ruby - 即使将历史记录大小设置为0并清除历史记录,也可以机械化内存泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26754110/

10-13 04:13