corriendo nokogiri en Jruby vs. solo ruby

Encontré una diferencia sorprendente en el uso de CPU y consumo de memoria. Parece que la recolección de basura no está ocurriendo cuando ejecuto la siguiente secuencia de comandos 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 

cuando se ejecuta en Jruby, el consumo de CPU es superior a 10, y el% de consumo de memoria aumenta con el tiempo (comienza de 2 a 20), hasta que finalmente dice “no hay suficiente memoria”

cuando se ejecuta en Ruby, el consumo de CPU nunca excede de 2, y el consumo de memoria es constante en% a 0.2!

¿Por qué diferencias tan grandes? ¿Por qué el consumo de memoria aumenta constantemente hasta que se bloquea?

ejecutándolo en Ruby, un uso de la CPU mucho menor y un consumo de memoria constante muy bajo

¿Estoy leyendo tu guión, verdad? ¿Está llegando al sitio pobre de craigslist y está realizando solicitudes de obtención de HTTP de 10K? 🙂

En cualquier caso, ¿cuál es su sistema, qué versión de Nokogiri joya, qué versión de JRuby? Con una pequeña modificación en el script (abriendo la solicitud HTTP solo una vez y luego rebobinando los mismos datos), tanto MRI como JRuby se comportan casi igual, JRuby incluso 2 segundos de un total de 20 más rápido. No hay problemas de memoria.

Ruby tiene mejor control de la memoria que Jruby. En mi opinión, solo debe usar Jruby si necesita usar bibliotecas de Java o si tiene varias instancias del mismo progtwig que se ejecutarán en la misma máquina al mismo tiempo, en ese caso, el almacenamiento en caché de JVM hará cosas sorprendentes.