On Tue, Dec 23, 2014 at 09:31:24AM +0000, Andy Seaborne wrote:
> You can do it from the command line with the original tool that was
> sept up into jvisualvm:
> 
> jstack ProcessId > stack_dump
> 
> (IIRC it's officially unsupported these days, but my Java 7 and 8
> installations have it)

Thanks for the hint!  So I saw 1024 threads with

        Thread 11824: (state = IN_NATIVE)
         - sun.nio.ch.FileDispatcherImpl.read0(java.io.FileDescriptor, long, 
int) @bci=0 (Compiled frame; information may be imprecise)
         - sun.nio.ch.SocketDispatcher.read(java.io.FileDescriptor, long, int) 
@bci=4, line=39 (Compiled frame)
         - sun.nio.ch.IOUtil.readIntoNativeBuffer(java.io.FileDescriptor, 
java.nio.ByteBuffer, long, sun.nio.ch.NativeDispatcher) @bci=114, line=223 
(Compiled frame)
         - sun.nio.ch.IOUtil.read(java.io.FileDescriptor, java.nio.ByteBuffer, 
long, sun.nio.ch.NativeDispatcher) @bci=48, line=197 (Compiled frame)
         - sun.nio.ch.SocketChannelImpl.read(java.nio.ByteBuffer) @bci=234, 
line=379 (Compiled frame)
         - 
org.eclipse.jetty.io.nio.ChannelEndPoint.fill(org.eclipse.jetty.io.Buffer) 
@bci=64, line=235 (Compiled frame)
         - 
org.eclipse.jetty.server.nio.BlockingChannelConnector$BlockingChannelEndPoint.fill(org.eclipse.jetty.io.Buffer)
 @bci=9, line=242 (Compiled frame)
         - org.eclipse.jetty.http.HttpParser.fill() @bci=322, line=1044 
(Compiled frame)
         - org.eclipse.jetty.http.HttpParser.parseNext() @bci=177, line=298 
(Compiled frame)
         - org.eclipse.jetty.http.HttpParser.parseAvailable() @bci=1, line=235 
(Compiled frame)
         - org.eclipse.jetty.server.BlockingHttpConnection.handle() @bci=51, 
line=72 (Compiled frame)
         - 
org.eclipse.jetty.server.nio.BlockingChannelConnector$BlockingChannelEndPoint.run()
 @bci=129, line=298 (Compiled frame)
         - 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(java.lang.Runnable) 
@bci=1, line=608 (Compiled frame)
         - org.eclipse.jetty.util.thread.QueuedThreadPool$3.run() @bci=47, 
line=543 (Compiled frame)
         - java.lang.Thread.run() @bci=11, line=745 (Interpreted frame)

and 2 management threads, and the cause is pretty obvious at that point
- yes, I simply ran out of sockets!  It seems Fuseki does not time out
inactive connections, but of course the true fault lies in my code which
creates so many of them - or rather never closes the connections.

That was caused by me misreading

        https://jena.apache.org/documentation/query/app_api.html

and not doing qexec.close() even though I did not use the try (...) { }
construct.  (It would be nice if I could reuse the same HTTP connection
for multiple *different* queries - but I don't think that's possible
here, or is it?)

Thanks,

-- 
                                Petr Baudis
        If you do not work on an important problem, it's unlikely
        you'll do important work.  -- R. Hamming
        http://www.cs.virginia.edu/~robins/YouAndYourResearch.html

Reply via email to