Uploaded image for project: 'JBoss Enterprise Application Platform'
  1. JBoss Enterprise Application Platform
  2. JBEAP-17739

[GSS](7.1.z) Memory leak in FlashScope - expired elements are not cleared

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Won't Do
    • Icon: Critical Critical
    • None
    • 7.2.3.GA
    • JSF
    • None
    • +
    • Hide
      • Using SessionScope instead of FlashScope for POST-REDIRECT-GET.
      • Set com.sun.faces.numberOfConcerrentFlashUsers and com.sun.faces.numberOfFlashesBetweenFlashReapings to web.xml as following
        <context-param>
            <param-name>com.sun.faces.numberOfConcerrentFlashUsers</param-name>
            <param-value>10</param-value>
        </context-param>
        <context-param>
            <param-name>com.sun.faces.numberOfFlashesBetweenFlashReapings</param-name>
            <param-value>1</param-value>
        </context-param>
        
      Show
      Using SessionScope instead of FlashScope for POST-REDIRECT-GET. Set com.sun.faces.numberOfConcerrentFlashUsers and com.sun.faces.numberOfFlashesBetweenFlashReapings to web.xml as following <context-param> <param-name> com.sun.faces.numberOfConcerrentFlashUsers </param-name> <param-value> 10 </param-value> </context-param> <context-param> <param-name> com.sun.faces.numberOfFlashesBetweenFlashReapings </param-name> <param-value> 1 </param-value> </context-param>
    • Hide

      1. Deploy the attached reproducer.
      2. Press "Accumulate 100MB in FlashScope" button several times, then, OOMError will occur.

      Show
      1. Deploy the attached reproducer. 2. Press "Accumulate 100MB in FlashScope" button several times, then, OOMError will occur.

      Objects in FlashScope is not cleared and keep accumulating even if POST-REDIRECT-BACK is completed.

      If we put a huge object to FlashScope continuously as the following code, Java heap space will be exhausted soon.

      @Model
      public class Action {
      
          private static final int oneHundredMB = 1024 * 1024 * 100;
      
          public String next() {
              Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
              flash.putNow("huge", new byte[oneHundredMB]);
              return "index.xhtml?faces-redirect=true";
          }
      }
      

      When OutOfMemoryError is happened, flashInnerMap field in com.sun.faces.context.flash.ELFlash is bloated.

      Class Name                                                             | Ref. Objects | Shallow Heap | Ref. Shallow Heap | Retained Heap
      -----------------------------------------------------------------------------------------------------------------------------------------
      java.lang.Thread @ 0xeea24380  default task-1 Thread                   |            1 |          120 |                64 |        20,800
      '- <Java Local> com.sun.faces.context.flash.ELFlash @ 0xee9e4608       |            1 |           40 |                64 |            64
         '- flashInnerMap java.util.concurrent.ConcurrentHashMap @ 0xee9e4630|            1 |           64 |                64 |   314,574,048
      -----------------------------------------------------------------------------------------------------------------------------------------
      

              spyrkob Bartosz Spyrko-Smietanko
              rhn-support-bmaxwell Brad Maxwell
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: