Мы запускаем небольшое приложение 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, и я все еще вижу те же проблемы.