бег нокогири в Jruby против просто руби

Я обнаружил поразительную разницу в использовании процессора и памяти. Кажется, что сборка мусора не происходит, когда я запускаю следующий скрипт 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, гораздо меньшее использование процессора и постоянное очень низкое потребление памяти


person bbbnb    schedule 28.11.2009    source источник
comment
Я бы хотел, чтобы вы зашли на свой собственный сервер, а не запускали DOS на чужой сервер только для тестирования.   -  person Chuck Vose    schedule 28.11.2009
comment
то же самое Это также нарушает условия использования.   -  person Thufir    schedule 21.01.2012


Ответы (2)


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

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

person Vladimir Sizikov    schedule 28.11.2009

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

person cjapes    schedule 05.06.2012
comment
Не могли бы вы объяснить свое утверждение: «ruby лучше контролирует память, чем JRuby»? - person Sébastien Le Callonnec; 06.06.2012
comment
Конечно. В JRuby легче иметь утечки памяти и сложнее их отлаживать. Потому что вы работаете с двумя средами, Ruby и переводом на Java. - person cjapes; 08.06.2012