【问题标题】:running nokogiri in Jruby vs. just ruby在 Jruby 中运行 nokogiri 与仅使用 ruby
【发布时间】:2012-06-06 06:03:02
【问题描述】:

我发现 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 使用率要低得多,并且内存消耗持续非常低

【问题讨论】:

  • 我希望你能访问自己的服务器,而不是仅仅为了测试而 DOSing 别人的服务器
  • 同上。这也违反了使用条款。

标签: ruby memory jruby nokogiri benchmarking


【解决方案1】:

我读你的剧本对吗?您是否在访问糟糕的 craigslist 站点,执行 10K HTTP 获取请求? :)

无论如何,你的系统是什么,Nokogiri gem 的哪个版本,JRuby 的哪个版本?对脚本进行少量修改(仅打开一次 HTTP 请求,然后回退相同的数据),MRI 和 JRuby 的行为大致相同,JRuby 甚至快了 20 秒中的 2 秒。没有内存问题。

【讨论】:

    【解决方案2】:

    ruby 比 Jruby 对内存的控制更好。 在我看来,如果你需要使用 Java 库,或者如果你有多个相同程序的实例将同时在同一台机器上运行,那么你应该只使用 Jruby,在这种情况下,JVM 缓存会做一些很棒的事情。

    【讨论】:

    • 您能否解释一下您的说法:“ruby 比 JRuby 对内存的控制更好”?
    • 当然。在 JRuby 中更容易出现内存泄漏并且更难调试它们。因为您正在使用两种环境,即 Ruby 和 Java 转换。
    猜你喜欢
    • 2013-02-23
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2012-11-20
    • 2015-12-09
    • 1970-01-01
    相关资源
    最近更新 更多