在Jruby和ruby中运行nokogiri

我发现CPU和内存消耗使用率差异很大。 当我运行以下nokogiri脚本时,似乎没有发生垃圾收集

require 'rubygems' require 'nokogiri' require 'open-uri' def getHeader() doz = Nokogiri::HTML(open('http://losangeles.craigslist.org/wst/reb/1484772751.html')) puts doz.xpath("html[1]\/body[1]\/h2[1]") end (1..10000).each do |a| getHeader() end 

当在Jruby中运行时,CPU消耗超过10,并且内存消耗%随时间上升(从2到20开始),直到它最终说“内存不足”

在Ruby中运行时,CPU消耗从不超过2,内存消耗%不变为0.2!

为什么会出现如此大的差异,为什么内存消耗会在崩溃之前稳步增长。

在Ruby中运行它,低得多的CPU使用率,以及持续非常低的内存消耗

我正在读你的剧本吗? 你是否打击了糟糕的craigslist网站,执行10K HTTP获取请求? 🙂

无论如何,你的系统是什么,哪个版本的Nokogirigem,哪个JRuby版本? 通过对脚本进行少量修改(仅打开HTTP请求一次,然后重绕相同的数据),MRI和JRuby的行为大致相同,JRuby甚至更快20分钟中的2秒。 没有记忆问题。

ruby比Jruby更好地控制记忆。 在我看来,如果你需要使用Java库,或者你有多个同一个程序的实例同时在同一台机器上运行,你应该只使用Jruby,在这种情况下,JVM缓存会做出惊人的事情。