(this is version 2.5.0 or 2.6.0 presumably)

Hi Gunnar,

On 15/05/17 12:02, Gunnar Aastrand Grimnes wrote:
Hi all,

I switched from GET request to POST requests for SPARQL queries, and
then I make a few thousand queries and Fuseki starts failing with the
exception below.

Seems this was discussed in 2011: https://issues.apache.org/jira/browse/JENA-181

Part of that was the client side not closing it's end, hence leaving the connection open for longer - I guess that the open conenction, going right back to Fuseki, causes direct memory to be held for longer.

Maybe Fuseki could close the ServletOutputStream (despite not creating it). It looks like it is safe to do so. That would signal end of results from the server end.


I've tried tweaking -XX:MaxDirectMemorySize - but it doesn't look like
it makes much difference.

Did it make any difference?
What maximum size did you try?
What about other formats?
What about a really large amount?


GET requests with the query encoded in a get parameter has no problem.

which is a bit odd because the code for results is the same ... Jetty may be handing out a different ServletOutputStream though.


Does anyone have any newer insights?

Does the test case program on JENA-181 cause for situation to occur?

        Andy




[2017-05-15 12:15:46] Fuseki     WARN  [3353] RC = 500 : Direct buffer memory
java.lang.OutOfMemoryError: Direct buffer memory
         at java.nio.Bits.reserveMemory(Bits.java:658)
         at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123)
         at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)
         at 
org.eclipse.jetty.util.BufferUtil.allocateDirect(BufferUtil.java:128)
         at 
org.eclipse.jetty.io.ArrayByteBufferPool.acquire(ArrayByteBufferPool.java:69)
         at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:396)
         at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
         at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
         at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
         at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
         at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
         at org.apache.jena.atlas.io.IO.flush(IO.java:250)
         at 
org.apache.jena.atlas.io.BufferingWriter.flush(BufferingWriter.java:153)
         at org.apache.jena.atlas.io.IO.flush(IO.java:250)
         at 
org.apache.jena.atlas.io.IndentedWriter.flush(IndentedWriter.java:218)
         at 
org.apache.jena.sparql.resultset.XMLOutputResultSet.finish(XMLOutputResultSet.java:127)
         at 
org.apache.jena.sparql.resultset.ResultSetApply.apply(ResultSetApply.java:48)
         at org.apache.jena.sparql.resultset.XMLOutput.format(XMLOutput.java:52)
         at 
org.apache.jena.query.ResultSetFormatter.outputAsXML(ResultSetFormatter.java:367)
         at 
org.apache.jena.fuseki.servlets.ResponseResultSet$1.output(ResponseResultSet.java:197)
         at 
org.apache.jena.fuseki.servlets.ResponseResultSet.output(ResponseResultSet.java:303)
         at 
org.apache.jena.fuseki.servlets.ResponseResultSet.sparqlXMLOutput(ResponseResultSet.java:201)
         at 
org.apache.jena.fuseki.servlets.ResponseResultSet.doResponseResultSet$(ResponseResultSet.java:147)
         at 
org.apache.jena.fuseki.servlets.ResponseResultSet.doResponseResultSet(ResponseResultSet.java:93)
         at 
org.apache.jena.fuseki.servlets.SPARQL_Query.sendResults(SPARQL_Query.java:393)
         at 
org.apache.jena.fuseki.servlets.SPARQL_Query.execute(SPARQL_Query.java:272)
         at 
org.apache.jena.fuseki.servlets.SPARQL_Query.executeWithParameter(SPARQL_Query.java:228)
         at 
org.apache.jena.fuseki.servlets.SPARQL_Query.perform(SPARQL_Query.java:213)
         at 
org.apache.jena.fuseki.servlets.ActionSPARQL.executeLifecycle(ActionSPARQL.java:131)
         at 
org.apache.jena.fuseki.servlets.SPARQL_UberServlet.executeRequest(SPARQL_UberServlet.java:356)
         at 
org.apache.jena.fuseki.servlets.SPARQL_UberServlet.serviceDispatch(SPARQL_UberServlet.java:317)
         at 
org.apache.jena.fuseki.servlets.SPARQL_UberServlet.executeAction(SPARQL_UberServlet.java:271)
         at 
org.apache.jena.fuseki.servlets.ActionSPARQL.execCommonWorker(ActionSPARQL.java:82)
         at 
org.apache.jena.fuseki.servlets.ActionBase.doCommon(ActionBase.java:81)
         at 
org.apache.jena.fuseki.servlets.FusekiFilter.doFilter(FusekiFilter.java:73)
         at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
         at 
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
         at 
org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
         at 
org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
         at 
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
         at 
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
         at 
org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
         at 
org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
         at 
org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
         at 
org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
         at 
org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
         at 
org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
         at 
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
         at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
         at 
org.apache.jena.fuseki.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:285)
         at 
org.apache.jena.fuseki.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java:248)
         at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
         at 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581)
         at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
         at 
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
         at 
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
         at 
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1156)
         at 
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
         at 
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
         at 
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1088)
         at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
         at 
org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:374)
         at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
         at org.eclipse.jetty.server.Server.handle(Server.java:517)
         at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:306)
         at 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
         at 
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:245)
         at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
         at 
org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)
         at 
org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
         at 
org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
         at 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
         at 
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
         at java.lang.Thread.run(Thread.java:745)

Reply via email to