2009-11-28 67 views
0

我在CPU和內存消耗使用率方面發現了驚人的差異。看來當我運行以下引入nokogiri腳本垃圾收集不發生在Jruby運行nokogiri vs. ruby​​

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

我希望你會打你自己的服務器,而不是DOS的別人的服務器只是爲了測試 – 2009-11-28 17:33:19

+0

同上。這也違反了使用條款。 – Thufir 2012-01-21 11:10:08

回答

3

難道我讀你的腳本權不變非常低的內存消耗?你是否碰到可憐的craigslist站點,執行10K HTTP獲取請求? :)

無論如何,你的系統是哪個版本的Nokogiri寶石,哪個JRuby版本?通過對腳本的小修改(僅打開HTTP請求一次,然後倒回相同的數據),MRI和JRuby的行爲大致相同,JRuby甚至比總共20秒快2秒。沒有內存問題。

0

紅寶石比Jruby有更好的內存控制。 在我看來,如果你需要使用Java庫,或者如果你有幾個同時運行在同一臺機器上的相同程序的實例,那麼你應該只使用Jruby,在這種情況下,JVM緩存會做很棒的事情。

+0

您能解釋一下您的聲明:「ruby比JRuby更能控制內存」嗎? – 2012-06-06 17:46:08

+0

當然。在JRuby中存在內存泄漏並且難以調試它們會更容易。因爲你正在使用兩種環境,Ruby和Java轉換。 – cjapes 2012-06-08 01:52:39