0

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使用率がはるかに低くなり、メモリ消費量が常に非常に少なくなります。

4

2 に答える 2

3

私はあなたのスクリプトを正しく読んでいますか?10,000 の HTTP 取得要求を実行して、貧弱な craigslist サイトにアクセスしていますか? :)

とにかく、あなたのシステムは何ですか、ノコギリgemのバージョンは何ですか、JRubyのバージョンは何ですか?スクリプトを少し変更すると (HTTP 要求を 1 回だけ開き、同じデータを巻き戻す)、MRI と JRuby はほぼ同じように動作し、JRuby は合計 20 秒中 2 秒も速くなります。メモリの問題はありません。

于 2009-11-28T11:21:02.233 に答える
0

ruby は Jruby よりもメモリの制御が優れています。私の意見では、Java ライブラリを使用する必要がある場合、または同じマシンで同時に実行される同じプログラムの複数のインスタンスがある場合にのみ、Jruby を使用する必要があります。その場合、JVM キャッシングは驚くべきことを行います。

于 2012-06-05T22:03:02.767 に答える