You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "zmhassan (JIRA)" <ji...@apache.org> on 2014/01/28 16:35:38 UTC

[jira] [Comment Edited] (AMQ-4994) Web Console - java.lang.OutOfMemoryError: Java heap space - while browsing deep queues

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

zmhassan edited comment on AMQ-4994 at 1/28/14 3:34 PM:
--------------------------------------------------------

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
http://github.com/zmhassan



was (Author: zmhassan):
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)