2014-09-06 18 views
5

benzer bir soru java-thread-dump-waiting-on-object-monitor-line-not-followed-by-waiting-on istedi, ama hiçbir somut cevap yoktu, bu yüzden iplik içinde olduğunu görüyoruz aşağıdaki iplik dökümü olarak ... Daha fazla bilgi almak için umuduylaJava iş parçacığı dökümü: BEKLEME (nesne monitöründe) - ne bekliyor?

soracağım yoktu " BEKLEME (nesne monitöründe) "durum - ancak ne beklediğini gösteren" bekleyen "bir çizgi yoktur. Bu iş parçacığı kümesini nasıl yorumlayabilirim ve bu iş parçacığının neden beklediğini (ve hangi kaynağın) beklediğini nasıl anlarım?

"eventTaskExecutor-50" prio=10 tid=0x0000000004117000 nid=0xd8dd in Object.wait() [0x00007f8f457ad000] 
java.lang.Thread.State: WAITING (on object monitor) 
at java.lang.Object.wait(Native Method) 
at java.lang.Object.wait(Object.java:503) 
at com.tibco.tibjms.TibjmsxLink.sendRequest(TibjmsxLink.java:359) 
- locked <0x00007f98cbebe5d8> (a com.tibco.tibjms.TibjmsxResponse) 
at com.tibco.tibjms.TibjmsxSessionImp._confirmTransacted(TibjmsxSessionImp.java:2934) 
at com.tibco.tibjms.TibjmsxSessionImp._confirm(TibjmsxSessionImp.java:3333) 
- locked <0x00007f90101399b8> (a java.lang.Object) 
at com.tibco.tibjms.TibjmsxSessionImp._commit(TibjmsxSessionImp.java:2666) 
at com.tibco.tibjms.TibjmsxSessionImp.commit(TibjmsxSessionImp.java:4516) 
at org.springframework.jms.support.JmsUtils.commitIfNecessary(JmsUtils.java:217) 
at org.springframework.jms.listener.AbstractMessageListenerContainer.commitIfNecessary(AbstractMessageListenerContainer.java:577) 
at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:482) 
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:325) 
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:263) 
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1102) 
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:996) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:722) 

Locked ownable synchronizers: 
- <0x00007f901011ca88> (a java.util.concurrent.ThreadPoolExecutor$Worker) 

Bu iş parçacığı, Tibco veri yolundan iletileri kabul etmek üzere yapılandırılan dinleyici iş parçacıklarından biridir.

Teşekkürler!

Marina

cevap

7

O HotSpot JVM bir özelliği var. Yığın dökülürken, JVM, wait nesnesini yerel değişkenlerden kurtarır. Bu bilgi, yorumlanmış yöntemler için kullanılabilir, ancak derlenmiş yerel sarmalayıcılar için kullanılamaz.

Object.wait yeterince sık yürütüldüğünde, JIT derlenmiş olur.
Bundan sonra, bir iş parçacığı dökümünde "bekleyen" satırı olmayacaktır. wait() yana

  1. genellikle bekleme nesne istifinin iz son kilitli amacı, bir synchronized nesne üzerinde adı olmalıdır. Senin durumunda bu

    - locked <0x00007f98cbebe5d8> (a com.tibco.tibjms.TibjmsxResponse) 
    
  2. olmaktan Object.wait önlemek için ise JIT-derlenmiş Bu iplik bekliyor

    -XX:CompileCommand="exclude,java/lang/Object.wait" 
    
+0

bu harika bilgi - teşekkürler, apangin! – Marina

1

aşağıdaki JVM seçeneğini kullanın (ve dolayısıyla her zaman kullanılabilir bekleme bilgi verme) TIBCO EMS istemci kitaplığı tarafından oluşturulan başka bir iş parçacığından bildirim (iş parçacığı adı, TCPLinkReader, tam iş parçacığı dökümüne bakarsanız, onu bulabilmeniz gerekir).

Yığınlama, Spring uygulamasının bir oturum başlatmaya çalıştığını gösterir. Oturumu yapmak için EMS istemcisinin sunucuya bazı verileri göndermesi ve oturumun başarılı bir şekilde işlenip gerçekleştirilmediğini sunucudan teyit etmek için beklemesi gerekir.

TCPLinkReader iş parçacığı, EMS istemcisinin aşağı akış (sunucudan istemciye) TCP paketlerini almak için kullandığı özel bir iş parçacığıdır.

bu parçacığı uzun sürer görüyorsanız, 2 senaryo vardır: muhtemelen

  • istemci kitaplığında bazı kusurları vardır asılı, EMS sunucu tarafında yanlış

    • Öyle bir şey ki deadlock neden oldu, bu yüzden sunucu yanıtı geri gönderdi ama TCPLinkReader iş parçacığı aramayı bildirmedi.

    Sorun devam ederse, son ileti dizisini gönderin.

  • +0

    Şaşırtıcı bir şekilde, iş parçacığı dökümlerimde herhangi bir TCPLinkReader iş parçacığı görmüyorum ... Ancak, durumun değerlendirilmesinin doğru olduğunu düşünüyorum, çünkü gördüğümüz sorunların Tibco veri yolu ile iletişim kurmasıyla ilgili olduğunu sanıyorum. Bilgiden dolayı teşekkür ederim! – Marina

    İlgili konular