[ 
https://issues.apache.org/jira/browse/AMQ-4994?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Daniel Kulp updated AMQ-4994:
-----------------------------

    Attachment: AMQ-4994.patch

Here's a start of a patch that fixes the immediate OOM issue by removing the 
sitemesh stuff from the filterchain so everything is streamed back directly to 
the client without buffering.  All the .jsp are changed to include a 
head/header/footer jsp files that handle the formatting for those.   

This is just a start, still need to actually remove the sitemesh stuff, delete 
the various sitemesh specific files, etc...

> Web Console - java.lang.OutOfMemoryError: Java heap space - while browsing 
> deep queues
> --------------------------------------------------------------------------------------
>
>                 Key: AMQ-4994
>                 URL: https://issues.apache.org/jira/browse/AMQ-4994
>             Project: ActiveMQ
>          Issue Type: Bug
>    Affects Versions: 5.9.0
>            Reporter: Dejan Bosanac
>            Priority: Blocker
>         Attachments: AMQ-4994.patch
>
>
> When browsing a deep queue with large number of messages, broker throws 
> {code}java.lang.OutOfMemoryError: Java heap space
>       at java.util.Arrays.copyOf(Arrays.java:2367)
>       at java.io.CharArrayWriter.write(CharArrayWriter.java:105)
>       at java.io.PrintWriter.write(PrintWriter.java:426)
>       at 
> com.opensymphony.module.sitemesh.filter.RoutablePrintWriter.write(RoutablePrintWriter.java:144)
>       at 
> org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:181)
>       at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:412)
>       at 
> org.apache.taglibs.standard.tag.common.core.OutSupport.writeEscapedXml(OutSupport.java:239)
>       at 
> org.apache.taglibs.standard.tag.common.core.OutSupport.out(OutSupport.java:208)
>       at 
> org.apache.taglibs.standard.tag.common.core.OutSupport.doStartTag(OutSupport.java:128)
>       at 
> org.apache.jsp.browse_jsp._jspx_meth_c_out_6(org.apache.jsp.browse_jsp:323)
>       at org.apache.jsp.browse_jsp.access$8(org.apache.jsp.browse_jsp:314)
>       at 
> org.apache.jsp.browse_jsp$browse_jspHelper.invoke0(org.apache.jsp.browse_jsp:426)
>       at 
> org.apache.jsp.browse_jsp$browse_jspHelper.invoke(org.apache.jsp.browse_jsp:450)
>       at 
> org.apache.jsp.tag.web.jms.forEachMessage_tag.doTag(org.apache.jsp.tag.web.jms.forEachMessage_tag:89)
>       at 
> org.apache.jsp.browse_jsp._jspx_meth_jms_forEachMessage_0(org.apache.jsp.browse_jsp:170)
>       at org.apache.jsp.browse_jsp._jspService(org.apache.jsp.browse_jsp:100)
>       at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
>       at 
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
>       at 
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:486)
>       at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:380)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
>       at 
> org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:652)
>       at 
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1320)
>       at 
> org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
>       at 
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
>       at 
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1291)
>       at org.apache.activemq.web.SessionFilter.doFilter(SessionFilter.java:45)
>       at 
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1291)
>       at 
> org.apache.activemq.web.filter.ApplicationContextFilter.doFilter(ApplicationContextFilter.java:102)
>       at 
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1291)
>       at 
> com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129){code}
> when trying to browse that queue.
> To reproduce it:
> 1. Start a broker with default configuration
> 2. Send 200k messages with
> {code}ant producer -Dmax=200000 -Ddurable=true -Dsubject=TEST{code}
> 3. Try to browse the queue
> http://localhost:8161/admin/browse.jsp?JMSDestination=TEST
> The proper solution to this problem is to implement proper pagination while 
> browsing the messages, so users can browse through all messages showing 100 
> msgs (or so) at the time and not using all the available memory.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to