работает нокогири в Jruby против просто ruby - PullRequest
0 голосов
/ 28 ноября 2009

Я обнаружил поразительную разницу в использовании процессора и памяти. Кажется, сборка мусора не происходит, когда я запускаю следующий скрипт 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 потребление ЦП превышает 10, а потребление памяти% увеличивается со временем (начинается с 2 до 20), пока в итоге не появится сообщение «недостаточно памяти»

при запуске в Ruby потребление ЦП никогда не превышает 2, а потребление памяти% постоянное при 0,2!

Почему такие большие различия, почему потребление памяти неуклонно увеличивается до тех пор, пока не произойдет сбой.

запуск в Ruby, значительно меньшее использование процессора и постоянное очень низкое потребление памяти

Ответы [ 2 ]

3 голосов
/ 28 ноября 2009

Я правильно читаю ваш сценарий? Вы заходите на плохой сайт Craigslist, выполняющий 10K HTTP-запросов на получение? :)

Во всяком случае, какая у вас система, какая версия Nokogiri gem, какая версия JRuby? С небольшой модификацией скрипта (открытие HTTP-запроса только один раз и затем перематывание одних и тех же данных), и MRI, и JRuby ведут себя примерно одинаково, JRuby даже на 2 секунды из 20 быстрее. Нет проблем с памятью.

0 голосов
/ 06 июня 2012

ruby ​​лучше контролирует память, чем Jruby. По моему мнению, вам следует использовать Jruby только в том случае, если вам нужно использовать библиотеки Java или если у вас есть несколько экземпляров одной и той же программы, которые будут работать на одной и той же машине одновременно, в этом случае кэширование JVM сделает удивительные вещи.

...