[ 
https://issues.apache.org/jira/browse/AMQ-4994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13884254#comment-13884254
 ] 

zmhassan commented on AMQ-4994:
-------------------------------

Hi,

I had a similar problem when I was building BZCareer.com search engine where I 
had half a million records in the database that I wanted to show to users. I 
couldn't just send half a million JSON objects from the server to the client 
because it's just too much data. Rather I gave them the first 10 records per 
page. 

For that reason I have to agree with Dejan regarding his suggestion for adding 
pagination. 

Users don't need to see 200,000 records on a single page. Only maybe 100 
records per page. 

If everyone agrees with this I can write the client side JavaScript to generate 
pagination and get data asynchronously. I can also write the server side code 
that will return a JSON object with the first hundred records and subsequent 
records from specifying in the query string 'page=#'.


/admin/browse.jsp?JMSDestination=TEST&page=1
Note: Page=1 is the first 100 records and so on...

I think pagination added to the console would solve this issue. With every 
decision we can weigh the benefit vs the cost. If this is a benefit that has no 
cost then why not implement this or better yet why not let me implement this as 
a matter of fact.


Thanks,
Zak
@Prospect1010


> 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
>
> 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