2010-07-19 1 views
0

Мы запускаем небольшое приложение JRuby on Rails под Tomcat 6.0.28 с основанием Spring. Я провел некоторое время с инструментом анализа памяти Eclipse, и я могу определенно сказать, что экземпляры JRubyClassLoader протекают. Я настраиваю наш webapp только на использование одного JRuby, и тогда я эффективно сделал «горячее» развертывание в Tomcat на touching войну. Проделав это несколько раз, я вижу несколько примеров того, как JRubyClassLoader сидит.JRubyClassLoader не освобождается

Поскольку загрузчик классов не освобождается, загруженные классы не освобождаются, и у нас заканчивается пространство PermGen.

Использование Eclipse Анализ памяти, я могу видеть путь к корню GC выглядит следующим образом:

org.jruby.util.JRubyClassLoader 
    jrubyClassLoader org.jruby.Ruby 
    runtime org.jruby.util.io.ChannelStream 
     reference java.lang.ref.Finalizer 
     next java.lang.ref.Finalizer 

И список next java.lang.ref.Finalizer идет на, казалось бы, навсегда ... в точку, где я не могу найти фактический корень GC.

Если выполнить описанные Leak Подозреваемые отчет, подозреваемый # 1 является "java.lang.ref.Finalizer", загружается "загрузчик классов < системы >".

Любые идеи, почему Finalizer торчит вокруг?

EDIT

Как, возможно, связанной стороне записки, каждый раз, когда я горячий развернуть, получить убивание NullPointerExceptions:

java.lang.NullPointerException 
    at com.kenai.jffi.Function.finalize(Function.java:177) 
    at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method) 
    at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83) 
    at java.lang.ref.Finalizer.access$100(Finalizer.java:14) 
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160) 

EDIT 2

Я модернизированную к JRuby 1.5.1, и я все еще вижу те же проблемы.

ответ

0

интересный. еще одно доказательство того, что finalize() не должно использоваться.

это не ваша вина, и вы не можете с этим поделать.

может попытаться убедить команду JRuby сбросить finalize()? не должен ли JRuby заботиться об освобождении ресурсов в самое ближайшее время, а не ждать до GC? Разработчики с использованием JRuby не взаимодействуют с этими объектами, все они находятся под контролем JRuby.

 Смежные вопросы

  • Нет связанных вопросов^_^