Jeff Schnitzer wrote:
> Neither <ee:Startup/> nor <resin:Service/> has any observable effect.
> There's definitely some sort of cpu loop; as soon as I enqueue one
> entry, one core goes to 99% for the java process.  Occasionally the
> thread hops between cores.
>   
Thanks. The loop is unrelated to EJB or JMS.

The spin is related to changes in the sync/locking in the thread/alarm 
code, moving to atomic locks where possible.

-- Scott
>  * It happens with both jms:FileQueue and jms:MemoryQueue.
>  * There seems to be a 1 or 2 second delay before the CPU pegs.
>
> There's nothing obvious to me in the thread dump, but here it is...
>
> 2010-07-20 17:01:15
> Full thread dump Java HotSpot(TM) 64-Bit Server VM (16.3-b01-279 mixed mode):
>
> "resin-11" daemon prio=5 tid=101aca000 nid=0x1185fb000 waiting on
> condition [1185fa000]
>    java.lang.Thread.State: WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:283)
>         at com.caucho.env.thread.ResinThread.waitForTask(ResinThread.java:199)
>         at com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:157)
>         at com.caucho.env.thread.ResinThread.run(ResinThread.java:126)
>
> "resin-10" daemon prio=5 tid=101ac9000 nid=0x1184f8000 runnable [1184f7000]
>    java.lang.Thread.State: RUNNABLE
>         at java.net.SocketInputStream.socketRead0(Native Method)
>         at java.net.SocketInputStream.read(SocketInputStream.java:129)
>         at java.net.SocketInputStream.read(SocketInputStream.java:182)
>         at 
> com.caucho.hessian.io.Hessian2StreamingInput$StreamingInputStream.readChunkLength(Hessian2StreamingInput.java:241)
>         at 
> com.caucho.hessian.io.Hessian2StreamingInput$StreamingInputStream.startPacket(Hessian2StreamingInput.java:167)
>         at 
> com.caucho.hessian.io.Hessian2StreamingInput.startPacket(Hessian2StreamingInput.java:94)
>         at com.caucho.hmtp.HmtpReader.readPacket(HmtpReader.java:102)
>         at com.caucho.hmtp.HmtpLink.run(HmtpLink.java:111)
>         at com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:169)
>         at com.caucho.env.thread.ResinThread.run(ResinThread.java:126)
>
> "process reaper" daemon prio=5 tid=101a89800 nid=0x1183f5000 runnable
> [1183f4000]
>    java.lang.Thread.State: RUNNABLE
>         at java.lang.UNIXProcess.waitForProcessExit(Native Method)
>         at java.lang.UNIXProcess.access$900(UNIXProcess.java:17)
>         at java.lang.UNIXProcess$2$1.run(UNIXProcess.java:86)
>
> "watchdog-" daemon prio=5 tid=10199c800 nid=0x1181a6000 in
> Object.wait() [1181a5000]
>    java.lang.Thread.State: WAITING (on object monitor)
>         at java.lang.Object.wait(Native Method)
>         - waiting on <106b74888> (a java.lang.UNIXProcess)
>         at java.lang.Object.wait(Object.java:485)
>         at java.lang.UNIXProcess.waitFor(UNIXProcess.java:115)
>         - locked <106b74888> (a java.lang.UNIXProcess)
>         at 
> com.caucho.boot.WatchdogChildProcess.run(WatchdogChildProcess.java:145)
>         at com.caucho.boot.WatchdogChildTask.run(WatchdogChildTask.java:174)
>         at com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:169)
>         at com.caucho.env.thread.ResinThread.run(ResinThread.java:126)
>
> "watchdog-process-log-0-1" daemon prio=5 tid=10199c000 nid=0x1180a3000
> runnable [1180a2000]
>    java.lang.Thread.State: RUNNABLE
>         at java.io.FileInputStream.readBytes(Native Method)
>         at java.io.FileInputStream.read(FileInputStream.java:199)
>         at 
> java.lang.UNIXProcess$DeferredCloseInputStream.read(UNIXProcess.java:227)
>         at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
>         at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
>         at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
>         - locked <106b76e48> (a java.io.BufferedInputStream)
>         at 
> com.caucho.boot.WatchdogChildProcess$WatchdogProcessLogThread.run(WatchdogChildProcess.java:745)
>         at com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:169)
>         at com.caucho.env.thread.ResinThread.run(ResinThread.java:126)
>
> "resin-7" daemon prio=5 tid=10199b000 nid=0x117fa0000 waiting on
> condition [117f9f000]
>    java.lang.Thread.State: WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:283)
>         at com.caucho.env.thread.ResinThread.waitForTask(ResinThread.java:199)
>         at com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:157)
>         at com.caucho.env.thread.ResinThread.run(ResinThread.java:126)
>
> "resin-6" daemon prio=5 tid=10199a800 nid=0x117e9d000 waiting on
> condition [117e9c000]
>    java.lang.Thread.State: WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:283)
>         at com.caucho.env.thread.ResinThread.waitForTask(ResinThread.java:199)
>         at com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:157)
>         at com.caucho.env.thread.ResinThread.run(ResinThread.java:126)
>
> "resin-5" daemon prio=5 tid=1031c1800 nid=0x117d9a000 waiting on
> condition [117d99000]
>    java.lang.Thread.State: WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:283)
>         at com.caucho.env.thread.ResinThread.waitForTask(ResinThread.java:199)
>         at com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:157)
>         at com.caucho.env.thread.ResinThread.run(ResinThread.java:126)
>
> "resin-4" daemon prio=5 tid=1031c0800 nid=0x117c97000 waiting on
> condition [117c96000]
>    java.lang.Thread.State: WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:283)
>         at com.caucho.env.thread.ResinThread.waitForTask(ResinThread.java:199)
>         at com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:157)
>         at com.caucho.env.thread.ResinThread.run(ResinThread.java:126)
>
> "resin-3" daemon prio=5 tid=1031c0000 nid=0x117b94000 waiting on
> condition [117b93000]
>    java.lang.Thread.State: WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:283)
>         at com.caucho.env.thread.ResinThread.waitForTask(ResinThread.java:199)
>         at com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:157)
>         at com.caucho.env.thread.ResinThread.run(ResinThread.java:126)
>
> "resin-2" daemon prio=5 tid=1031bf000 nid=0x117a91000 waiting on
> condition [117a90000]
>    java.lang.Thread.State: WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:283)
>         at com.caucho.env.thread.ResinThread.waitForTask(ResinThread.java:199)
>         at com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:157)
>         at com.caucho.env.thread.ResinThread.run(ResinThread.java:126)
>
> "resin-1" daemon prio=5 tid=1031be800 nid=0x11798e000 waiting on
> condition [11798d000]
>    java.lang.Thread.State: WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:283)
>         at com.caucho.env.thread.ResinThread.waitForTask(ResinThread.java:199)
>         at com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:157)
>         at com.caucho.env.thread.ResinThread.run(ResinThread.java:126)
>
> "com.caucho.util.alarm$coordinatorthr...@39dd3812-1" daemon prio=10
> tid=101999800 nid=0x11788b000 runnable [11788a000]
>    java.lang.Thread.State: RUNNABLE
>         at sun.misc.Unsafe.park(Native Method)
>         at 
> java.util.concurrent.locks.LockSupport.parkUntil(LockSupport.java:351)
>         at com.caucho.env.thread.TaskWorker.run(TaskWorker.java:149)
>         at java.lang.Thread.run(Thread.java:637)
>
> "resin-thread-launcher" daemon prio=5 tid=101999000 nid=0x117788000
> waiting on condition [117787000]
>    java.lang.Thread.State: WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:283)
>         at 
> com.caucho.env.thread.ThreadPool$ThreadLauncher.startConnection(ThreadPool.java:981)
>         at 
> com.caucho.env.thread.ThreadPool$ThreadLauncher.run(ThreadPool.java:1003)
>
> "resin-timer" daemon prio=10 tid=10319b800 nid=0x117685000 waiting on
> condition [117684000]
>    java.lang.Thread.State: TIMED_WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         at 
> java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:317)
>         at com.caucho.util.Alarm$AlarmThread.run(Alarm.java:567)
>
> "Poller SunPKCS11-Darwin" daemon prio=1 tid=10319a800 nid=0x117582000
> waiting on condition [117581000]
>    java.lang.Thread.State: TIMED_WAITING (sleeping)
>         at java.lang.Thread.sleep(Native Method)
>         at sun.security.pkcs11.SunPKCS11$TokenPoller.run(SunPKCS11.java:692)
>         at java.lang.Thread.run(Thread.java:637)
>
> "Low Memory Detector" daemon prio=5 tid=103091000 nid=0x117190000
> runnable [00000000]
>    java.lang.Thread.State: RUNNABLE
>
> "CompilerThread1" daemon prio=9 tid=101819800 nid=0x11708d000 waiting
> on condition [00000000]
>    java.lang.Thread.State: RUNNABLE
>
> "CompilerThread0" daemon prio=9 tid=101819000 nid=0x116f8a000 waiting
> on condition [00000000]
>    java.lang.Thread.State: RUNNABLE
>
> "Signal Dispatcher" daemon prio=9 tid=101818000 nid=0x116e87000
> waiting on condition [00000000]
>    java.lang.Thread.State: RUNNABLE
>
> "Surrogate Locker Thread (CMS)" daemon prio=5 tid=101817800
> nid=0x116d84000 waiting on condition [00000000]
>    java.lang.Thread.State: RUNNABLE
>
> "Finalizer" daemon prio=8 tid=101801800 nid=0x116a0f000 in
> Object.wait() [116a0e000]
>    java.lang.Thread.State: WAITING (on object monitor)
>         at java.lang.Object.wait(Native Method)
>         - waiting on <107cf3c38> (a java.lang.ref.ReferenceQueue$Lock)
>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
>         - locked <107cf3c38> (a java.lang.ref.ReferenceQueue$Lock)
>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
>         at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
>
> "Reference Handler" daemon prio=10 tid=101801000 nid=0x11690c000 in
> Object.wait() [11690b000]
>    java.lang.Thread.State: WAITING (on object monitor)
>         at java.lang.Object.wait(Native Method)
>         - waiting on <107cf0860> (a java.lang.ref.Reference$Lock)
>         at java.lang.Object.wait(Object.java:485)
>         at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
>         - locked <107cf0860> (a java.lang.ref.Reference$Lock)
>
> "main" prio=5 tid=103000800 nid=0x100501000 in Object.wait() [100500000]
>    java.lang.Thread.State: TIMED_WAITING (on object monitor)
>         at java.lang.Object.wait(Native Method)
>         - waiting on <10809c708> (a com.caucho.boot.ResinBoot)
>         at com.caucho.boot.ResinBoot.main(ResinBoot.java:324)
>         - locked <10809c708> (a com.caucho.boot.ResinBoot)
>
> "VM Thread" prio=9 tid=103089800 nid=0x116809000 runnable
>
> "Gang worker#0 (Parallel GC Threads)" prio=9 tid=103002000
> nid=0x102201000 runnable
>
> "Gang worker#1 (Parallel GC Threads)" prio=9 tid=103002800
> nid=0x102304000 runnable
>
> "Concurrent Mark-Sweep GC Thread" prio=9 tid=103042000 nid=0x116511000 
> runnable
> "VM Periodic Task Thread" prio=10 tid=103092800 nid=0x117293000
> waiting on condition
>
> "Exception Catcher Thread" prio=10 tid=103001800 nid=0x10171b000 runnable
> JNI global references: 975
>
> Heap
>  par new generation   total 19136K, used 7024K [106810000, 107cd0000, 
> 107cd0000)
>   eden space 17024K,  28% used [106810000, 106cdc108, 1078b0000)
>   from space 2112K, 100% used [1078b0000, 107ac0000, 107ac0000)
>   to   space 2112K,   0% used [107ac0000, 107ac0000, 107cd0000)
>  concurrent mark-sweep generation total 63872K, used 2737K [107cd0000,
> 10bb30000, 10e610000)
>  concurrent-mark-sweep perm gen total 21248K, used 14067K [10e610000,
> 10fad0000, 113a10000)
>
>
>
>
> On Tue, Jul 20, 2010 at 4:42 PM, Scott Ferguson <f...@caucho.com> wrote:
>   
>> Jeff Schnitzer wrote:
>>     
>>> By the way, I was able to work past the lazy-init issue (presumably)
>>> by using this block instead:
>>>
>>>       <cfg:MessageBeanConfig>
>>>               <cfg:class>test.DeliveryListener</cfg:class>
>>>               <cfg:destination>#{delivery}</cfg:destination>
>>>       </cfg:MessageBeanConfig>
>>>
>>> However, enqueueing a message doesn't produce calls on my Listener.
>>> It seems to produce some sort of spin-loop inside Resin.
>>>
>>>       
>> Try adding a <ee:Startup/> or <resin:Service/>. Otherwise the bean will
>> never get instantiated. It shouldn't spin, though.
>>
>> Although, this is a pretty twisted way of working around the issue :)
>>
>> -- Scott
>>     
>>> Jeff
>>>
>>> On Tue, Jul 20, 2010 at 1:17 PM, Jeff Schnitzer <j...@infohazard.org> wrote:
>>>
>>>       
>>>> On Tue, Jul 20, 2010 at 12:21 PM, Scott Ferguson <f...@caucho.com> wrote:
>>>>
>>>>         
>>>>> Thanks. It's a timing issue in CanDI. The jms:FileQueue was added to a
>>>>> lazy-init which wasn't being evaluated when the #{delivery} was
>>>>> processed. The fix will be in the next snapshot.
>>>>>
>>>>>           
>>>> Cool.  If you get to a point where this is checked into Resin trunk,
>>>> I'd love to help you test it :-)
>>>>
>>>> Jeff
>>>>
>>>>
>>>>         
>>> _______________________________________________
>>> resin-interest mailing list
>>> resin-interest@caucho.com
>>> http://maillist.caucho.com/mailman/listinfo/resin-interest
>>>
>>>       
>>
>> _______________________________________________
>> resin-interest mailing list
>> resin-interest@caucho.com
>> http://maillist.caucho.com/mailman/listinfo/resin-interest
>>
>>     
>
>
> _______________________________________________
> resin-interest mailing list
> resin-interest@caucho.com
> http://maillist.caucho.com/mailman/listinfo/resin-interest
>   



_______________________________________________
resin-interest mailing list
resin-interest@caucho.com
http://maillist.caucho.com/mailman/listinfo/resin-interest

Reply via email to