2014-10-07 2 views
0

Профилировщик YourKit используется для анализа моментального снимка.jstl forEach тег в jBoss 7, утечка памяти?

шаги, которые были проведены (для единственного пользователя):

  1. номер поколения было увеличено.
  2. некоторые действия на странице приложения выполнены. большинство из них получают объекты и отображают их через тег jstl forEach.
  3. выход был выполнен (session.invalidate())
  4. Время ожидания сеанса устанавливается в 5 минут. поэтому я ждал 6-8 минут, чтобы убедиться, что все в сеансе недействительно.
  5. был сделан моментальный снимок с помощью профилировщика YourKit.

То, что я обнаружил:

SomeEntity 
#3: Captured snapshot JBoss-2014-10-07-1.snapshot 11m 37s - 21m 43s 183 4392 7896 

<All the objects> 183 7896 
    java.lang.Object[] 182 7832 
     java.util.ArrayList 182 7832 
      somePath.someImpl 167 7208 
       java.lang.Object[] 164 7016 
        java.util.ArrayList 164 7016 
         org.apache.taglibs.standard.tag.rt.core.ForEachTag 164 7016 
       somePath.someAnotherImpl 3 192 
        java.lang.Object[] 3 192 
         java.util.ArrayList 3 192 
          org.apache.taglibs.standard.tag.rt.core.ForEachTag 3 192 

Что мы можем видеть здесь (пожалуйста, исправить меня, если я ошибаюсь) тег ForEachTag имеет 164 + 3 экземпляров SomeEntity. Я исследовал проблемы jstl и обнаружил, что проблема была воспроизведена. Например, here и here.

Но сначала говорят, что объекты с нулевым значением находятся в doEndTag в порядке, в соответствии с спецификацией jsp (пожалуйста, исправьте меня, если я ошибаюсь). И во-вторых, некоторые проблемы были решены в последней версии 1.2 jstl. В jBoss 7 используется версия 1.2, поэтому, похоже, проблема все еще существует.

Одно из решений - для обнуляемых объектов в doEndTag() считается плохой практикой. See here the reason

Далее я повторил действия, описанные ранее четырьмя различными пользователями. Я мог бы найти, что количество объектов, которые хранятся в org.apache.taglibs.standard.tag.rt.core.ForEachTag, теперь 539 + 12.

Как для меня, это утечка памяти. Если я ошибаюсь, пожалуйста, исправьте меня. Если нет, что мы можем сделать в этом случае? Для обнуления объектов в методе doEndTag?

ответ

0

У меня нет ответа для вас, но мы видим нечто очень похожее на Jboss 6 и тег foreach. Мы продолжаем расследовать (когда я нашел ваш пост) и сообщим вам, найдем ли что-нибудь.

--- EDIT ---

Мы добавили это исправление, которое разрешенное другая проблема утечки памяти, и, кажется, решили Еогеасп один, а также.

Для Jboss, мы обновили:

<subsystem xmlns="urn:jboss:domain:web:1.4" default-virtual-server="default-host" instance-id="${jvmRoute}" native="false"> 
 

 
      <configuration> 
 

 
       <jsp-configuration trim-spaces="true" tag-pooling="false"/> 
 

 
      </configuration>

Я считаю, что это было в файле standalone.xml.

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