Menu

deadlock?

Help
dubium
2008-03-01
2013-04-22
  • dubium

    dubium - 2008-03-01

    I'm having a bit of trouble with the otfeed/opentick, which I think may be due to a deadlock otfeed--but I may be wrong.

    I'm making submitting requests for 24 hours of ticks for 123 stocks, each on all 43 of the exchanges available (ignoring for the moment that stocks obviously don't trade on the futures exchanges, etc.), using a variant of the HistTicks.java code. I create all the requests and submit them on one connection, storing the requests. Then I waitForCompletion for each one in turn.

    I have had cases where all the data comes back, all onDataEnd's get called, and all waitForCompletion's return. However, often all onDataEnd's get called, but at least one of the waitForCompletion's gets stuck. Shouldn't that be impossible? If you think I'm doing something wrong, please let me know.

    Thank you.

    Here is a thread dump of such a case:

    2008-03-01 16:33:39
    Full thread dump Java HotSpot(TM) 64-Bit Server VM (1.6.0_02-b05 mixed mode):

    "Thread-2" prio=10 tid=0x0000002cb4986800 nid=0x31de runnable [0x000000004153d000..0x000000004153e350]
       java.lang.Thread.State: RUNNABLE
            at java.net.SocketInputStream.socketRead0(Native Method)
            at java.net.SocketInputStream.read(SocketInputStream.java:129)
            at org.otfeed.protocol.connector.SocketStreamerFactory.readCompletely(SocketStreamerFactory.java:107)
            at org.otfeed.protocol.connector.SocketStreamerFactory.access$100(SocketStreamerFactory.java:31)
            at org.otfeed.protocol.connector.SocketStreamerFactory$1.read(SocketStreamerFactory.java:86)
            at org.otfeed.protocol.connector.LoginStreamerFactory$SessionStreamer.read(LoginStreamerFactory.java:102)
            at org.otfeed.protocol.connector.OTThreadingEngine.readThreadRunner(OTThreadingEngine.java:202)
            at org.otfeed.protocol.connector.OTThreadingEngine.readThread(OTThreadingEngine.java:188)
            at org.otfeed.protocol.connector.OTThreadingEngine.access$200(OTThreadingEngine.java:45)
            at org.otfeed.protocol.connector.OTThreadingEngine$3.run(OTThreadingEngine.java:253)

    "Thread-1" prio=10 tid=0x0000002cb4b03800 nid=0x31dd in Object.wait() [0x000000004143d000..0x000000004143d3d0]
       java.lang.Thread.State: TIMED_WAITING (on object monitor)
            at java.lang.Object.wait(Native Method)
            at org.otfeed.protocol.connector.OTThreadingEngine.writeThreadRunner(OTThreadingEngine.java:140)
            - locked <0x0000002a9f315b28> (a java.util.concurrent.atomic.AtomicBoolean)
            at org.otfeed.protocol.connector.OTThreadingEngine.writeThread(OTThreadingEngine.java:117)
            at org.otfeed.protocol.connector.OTThreadingEngine.access$100(OTThreadingEngine.java:45)
            at org.otfeed.protocol.connector.OTThreadingEngine$2.run(OTThreadingEngine.java:248)

    "Thread-0" prio=10 tid=0x0000002cb4c0c400 nid=0x31db in Object.wait() [0x000000004133c000..0x000000004133c450]
       java.lang.Thread.State: WAITING (on object monitor)
            at java.lang.Object.wait(Native Method)
            at java.lang.Object.wait(Object.java:485)
            at org.otfeed.protocol.connector.OTThreadingEngine.controlRunner(OTThreadingEngine.java:268)
            - locked <0x0000002a9f307938> (a java.util.concurrent.atomic.AtomicBoolean)
            at org.otfeed.protocol.connector.OTThreadingEngine.controlThread(OTThreadingEngine.java:309)
            at org.otfeed.protocol.connector.OTThreadingEngine.access$000(OTThreadingEngine.java:45)
            at org.otfeed.protocol.connector.OTThreadingEngine$1.run(OTThreadingEngine.java:93)

    "Low Memory Detector" daemon prio=10 tid=0x0000002cb46c4800 nid=0x31d9 runnable [0x0000000000000000..0x0000000000000000]
       java.lang.Thread.State: RUNNABLE

    "CompilerThread1" daemon prio=10 tid=0x0000002cb46c2000 nid=0x31d8 waiting on condition [0x0000000000000000..0x00000000410381c0]
       java.lang.Thread.State: RUNNABLE

    "CompilerThread0" daemon prio=10 tid=0x0000002cb46c0400 nid=0x31d7 waiting on condition [0x0000000000000000..0x0000000040f371f0]
       java.lang.Thread.State: RUNNABLE

    "Signal Dispatcher" daemon prio=10 tid=0x0000002cb46bf000 nid=0x31d6 waiting on condition [0x0000000000000000..0x0000000000000000]
       java.lang.Thread.State: RUNNABLE

    "Finalizer" daemon prio=10 tid=0x0000002cb4417400 nid=0x31d5 in Object.wait() [0x0000000040d36000..0x0000000040d36350]
       java.lang.Thread.State: WAITING (on object monitor)
            at java.lang.Object.wait(Native Method)
            at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
            - locked <0x0000002a9f3227e0> (a java.lang.ref.ReferenceQueue$Lock)
            at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
            at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

    "Reference Handler" daemon prio=10 tid=0x0000002cb4416400 nid=0x31d4 in Object.wait() [0x0000000040c35000..0x0000000040c353d0]
       java.lang.Thread.State: WAITING (on object monitor)
            at java.lang.Object.wait(Native Method)
            at java.lang.Object.wait(Object.java:485)
            at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
            - locked <0x0000002a9f320340> (a java.lang.ref.Reference$Lock)

    "main" prio=10 tid=0x0000000040113400 nid=0x31ca in Object.wait() [0x000000004022b000..0x000000004022b590]
       java.lang.Thread.State: WAITING (on object monitor)
            at java.lang.Object.wait(Native Method)
            at java.lang.Object.wait(Object.java:485)
            at org.otfeed.protocol.request.RequestJob.waitForCompletion(RequestJob.java:118)
            - locked <0x0000002aaba7c988> (a java.util.concurrent.atomic.AtomicBoolean)
            at org.otfeed.protocol.connector.OTEngine$RequestHandler.waitForCompletion(OTEngine.java:99)
            at com.test.tester.HistTicksNew.processData(HistTicksNew.java:201)
            at com.test.tester.HistTicksNew.main(HistTicksNew.java:268)

    "VM Thread" prio=10 tid=0x0000002cb4411800 nid=0x31d3 runnable

    "GC task thread#0 (ParallelGC)" prio=10 tid=0x000000004011d800 nid=0x31cb runnable

    "GC task thread#1 (ParallelGC)" prio=10 tid=0x000000004011ec00 nid=0x31cc runnable

    "GC task thread#2 (ParallelGC)" prio=10 tid=0x0000000040120000 nid=0x31cd runnable

    "GC task thread#3 (ParallelGC)" prio=10 tid=0x0000000040121400 nid=0x31ce runnable

    "GC task thread#4 (ParallelGC)" prio=10 tid=0x0000000040122800 nid=0x31cf runnable

    "GC task thread#5 (ParallelGC)" prio=10 tid=0x0000000040123800 nid=0x31d0 runnable

    "GC task thread#6 (ParallelGC)" prio=10 tid=0x0000000040124c00 nid=0x31d1 runnable

    "GC task thread#7 (ParallelGC)" prio=10 tid=0x0000000040126000 nid=0x31d2 runnable

    "VM Periodic Task Thread" prio=10 tid=0x0000002cb46c6400 nid=0x31da waiting on condition

    JNI global references: 737

    Heap
    PSYoungGen      total 1941888K, used 606656K [0x0000002c015b0000, 0x0000002cb2700000, 0x0000002cb2700000)
      eden space 986432K, 61% used [0x0000002c015b0000,0x0000002c26620118,0x0000002c3d900000)
      from space 955456K, 0% used [0x0000002c76b30000,0x0000002c76b30000,0x0000002cb1040000)
      to   space 936128K, 0% used [0x0000002c3d900000,0x0000002c3d900000,0x0000002c76b30000)
    PSOldGen        total 5163584K, used 4047946K [0x0000002a9f300000, 0x0000002bda590000, 0x0000002c015b0000)
      object space 5163584K, 78% used [0x0000002a9f300000,0x0000002b964128c0,0x0000002bda590000)
    PSPermGen       total 21248K, used 5629K [0x0000002a99f00000, 0x0000002a9b3c0000, 0x0000002a9f300000)
      object space 21248K, 26% used [0x0000002a99f00000,0x0000002a9a47f740,0x0000002a9b3c0000)

     
    • Mike Kroutikov

      Mike Kroutikov - 2008-03-03

      How often does this reproduce?

      I'll have a look at the code, but looking may not be enough. Can you send me your code?

      Thanks
      -Mike

       

Log in to post a comment.

MongoDB Logo MongoDB