2014-03-19 90 views
0

今天早上我得到我已經寫了多線程應用程序,它運行良好,直至現在 錯誤,如等待守護線程掛起應用

* 

      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.hibernate.engine.jdbc.JdbcSupportLoader.useContextualLobCreation(JdbcSupportLoader.java:97) 
     at org.hibernate.engine.jdbc.JdbcSupportLoader.loadJdbcSupport(JdbcSupportLoader.java:52) 
     at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:118) 
     at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2863) 
     at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2859) 
     at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1870) 
     at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:906) 
     at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74) 
     at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:288) 
     at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
     - locked <0x00002aad4fe39460> (a java.util.concurrent.ConcurrentHashMap) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
     at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1117) 
     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:922) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
     - locked <0x00002aad4fa2c448> (a java.lang.Object) 
     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
     at com.myco.myproduct.util.CommonUtil.getProductQARulesContext(CommonUtil.java:383) 
     at com.myco.myproduct.SomeLauncher.initializeSpringBeans(SomeLauncher.java:336) 
     at com.myco.myproduct.SomeLauncher.main(SomeLauncher.java:97) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at com.myco.launcher.Main$1.run(Main.java:278) 
     at java.lang.Thread.run(Thread.java:619) 

"RMI TCP Accept-0" daemon prio=10 tid=0x000000005aa7c000 nid=0x48fd runnable [0x000000004163f000] 
    java.lang.Thread.State: RUNNABLE 
     at java.net.PlainSocketImpl.socketAccept(Native Method) 
     at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390) 
     - locked <0x00002aad4e716618> (a java.net.SocksSocketImpl) 
     at java.net.ServerSocket.implAccept(ServerSocket.java:453) 
     at java.net.ServerSocket.accept(ServerSocket.java:421) 
     at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:34) 
     at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369) 
     at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341) 
     at java.lang.Thread.run(Thread.java:619) 

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

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

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

"Signal Dispatcher" daemon prio=10 tid=0x000000005a941000 nid=0x48f6 runnable [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"Finalizer" daemon prio=10 tid=0x000000005a908800 nid=0x48f5 in Object.wait() [0x0000000041dcd000] 
    java.lang.Thread.State: WAITING (on object monitor) 
     at java.lang.Object.wait(Native Method) 
     - waiting on <0x00002aad4e5c11e0> (a java.lang.ref.ReferenceQueue$Lock) 
     at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) 
     - locked <0x00002aad4e5c11e0> (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=0x000000005a906800 nid=0x48f4 in Object.wait() [0x0000000041ccc000] 
    java.lang.Thread.State: WAITING (on object monitor) 
     at java.lang.Object.wait(Native Method) 
     - waiting on <0x00002aad4e5c1048> (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 <0x00002aad4e5c1048> (a java.lang.ref.Reference$Lock) 

"VM Thread" prio=10 tid=0x000000005a900000 nid=0x48f3 runnable 

"GC task thread#0 (ParallelGC)" prio=10 tid=0x000000005a8a6000 nid=0x48eb runnable 

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

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

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

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

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

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

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

"VM Periodic Task Thread" prio=10 tid=0x00002aaea400c800 nid=0x48fe waiting on condition 

JNI global references: 843 

[xyz] /srv/net/gigs_int1/x_xyz_pqd (x_xyz_pqd) $ /ms/dist/myco/sun/jdk/1.6.0_16-x86_64/bin/jstack 18665 
2014-03-19 06:30:55 
Full thread dump Java HotSpot(TM) 64-Bit Server VM (14.2-b01 mixed mode): 

"Attach Listener" daemon prio=10 tid=0x000000005b524800 nid=0x6cb8 waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"DestroyJavaVM" prio=10 tid=0x00002aaea400d800 nid=0x48ea waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"Thread-1" prio=10 tid=0x00002aaea4022800 nid=0x48ff runnable [0x0000000040db8000] 
    java.lang.Thread.State: RUNNABLE 
     at java.net.SocketInputStream.socketRead0(Native Method) 
     at java.net.SocketInputStream.read(SocketInputStream.java:129) 
     at oracle.net.ns.Packet.receive(Packet.java:282) 
     at oracle.net.ns.DataPacket.receive(DataPacket.java:103) 
     at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:230) 
     at oracle.net.ns.NetInputStream.read(NetInputStream.java:175) 
     at oracle.net.ns.NetInputStream.read(NetInputStream.java:100) 
     at oracle.net.ns.NetInputStream.read(NetInputStream.java:85) 
     at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:122) 
     at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:78) 
     at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1179) 
     at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1155) 
     at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:279) 
     at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186) 
     at oracle.jdbc.driver.T4C8TTIClob.createTemporaryLob(T4C8TTIClob.java:530) 
     at oracle.jdbc.driver.T4CConnection.createTemporaryClob(T4CConnection.java:3209) 
     - locked <0x00002aad5b4022e8> (a oracle.jdbc.driver.T4CConnection) 
     at oracle.jdbc.driver.PhysicalConnection.createClob(PhysicalConnection.java:9371) 
     at org.apache.commons.dbcp.DelegatingConnection.createClob(DelegatingConnection.java:582) 
     at org.apache.commons.dbcp.DelegatingConnection.createClob(DelegatingConnection.java:582) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.hibernate.engine.jdbc.JdbcSupportLoader.useContextualLobCreation(JdbcSupportLoader.java:97) 
     at org.hibernate.engine.jdbc.JdbcSupportLoader.loadJdbcSupport(JdbcSupportLoader.java:52) 
     at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:118) 
     at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2863) 
     at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2859) 
     at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1870) 
     at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:906) 
     at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74) 
     at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:288) 
     at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
     - locked <0x00002aad4fe39460> (a java.util.concurrent.ConcurrentHashMap) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
     at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1117) 
     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:922) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
     - locked <0x00002aad4fa2c448> (a java.lang.Object) 
     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
     at com.myco.myproduct.util.CommonUtil.getProductQARulesContext(CommonUtil.java:383) 
     at com.myco.myproduct.SomeLauncher.initializeSpringBeans(SomeLauncher.java:336) 
     at com.myco.myproduct.SomeLauncher.main(SomeLauncher.java:97) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at com.myco.launcher.Main$1.run(Main.java:278) 
     at java.lang.Thread.run(Thread.java:619) 

"RMI TCP Accept-0" daemon prio=10 tid=0x000000005aa7c000 nid=0x48fd runnable [0x000000004163f000] 
    java.lang.Thread.State: RUNNABLE 
     at java.net.PlainSocketImpl.socketAccept(Native Method) 
     at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390) 
     - locked <0x00002aad4e716618> (a java.net.SocksSocketImpl) 
     at java.net.ServerSocket.implAccept(ServerSocket.java:453) 
     at java.net.ServerSocket.accept(ServerSocket.java:421) 
     at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:34) 
     at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369) 
     at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341) 
     at java.lang.Thread.run(Thread.java:619) 

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

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

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

"Signal Dispatcher" daemon prio=10 tid=0x000000005a941000 nid=0x48f6 runnable [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"Finalizer" daemon prio=10 tid=0x000000005a908800 nid=0x48f5 in Object.wait() [0x0000000041dcd000] 
    java.lang.Thread.State: WAITING (on object monitor) 
     at java.lang.Object.wait(Native Method) 
     - waiting on <0x00002aad4e5c11e0> (a java.lang.ref.ReferenceQueue$Lock) 
     at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) 
     - locked <0x00002aad4e5c11e0> (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=0x000000005a906800 nid=0x48f4 in Object.wait() [0x0000000041ccc000] 
    java.lang.Thread.State: WAITING (on object monitor) 
     at java.lang.Object.wait(Native Method) 
     - waiting on <0x00002aad4e5c1048> (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 <0x00002aad4e5c1048> (a java.lang.ref.Reference$Lock) 

"VM Thread" prio=10 tid=0x000000005a900000 nid=0x48f3 runnable 

"GC task thread#0 (ParallelGC)" prio=10 tid=0x000000005a8a6000 nid=0x48eb runnable 

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

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

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

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

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

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

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

"VM Periodic Task Thread" prio=10 tid=0x00002aaea400c800 nid=0x48fe waiting on condition 

JNI global references: 843 

* 我明白了什麼是兩個不同的JVM守護線程正在等待不同的對象[0x0000000041ccc000]和[0x0000000041dcd000]所以我不知道爲什麼應用程序停止運行

我嘗試以下

1)殺死進程和重新啓動,類似問題

2)我在池中的默認線程數是24 ...但是當我運行相同的代碼+池大小爲10的同一數據時,它「有時」運行良好,其他時間它給出相同的錯誤

會明白在調試這個

面對一些管理相關的許可問題jvisualVM從我的本地Windows計算機連接到Linux服務器上的任何光線,將不勝感激,如果我可以使用標準的JDK /斌/工具來解決/調試這一點。

+2

這真的不是一個錯誤。它是一個線程轉儲,告訴你一個守護進程終結器正在等待一個對象完成,以便GC可以回收它。這不是不正常的,除非終結者等待永遠聲明對象。除非長時間阻塞線程或虛擬機報告死鎖,否則這可能不是問題的根源。使用'jvisualVM'獲取服務器的完整線程轉儲以檢查其他線程。我會從那裏開始。 –

+1

這些線程與獲取垃圾回收之前運行可終結對象的finalize()方法有關。終結器線程正在終結器隊列中等待,這意味着隊列只是空的。這絕對不是問題。你應該檢查完整的線程轉儲,以及你的日誌。 –

+0

@DeepakBeta我認爲終結者線程正在等待一些東西來完成。這很正常。 – immibis

回答

0

我看不到可見堆棧跟蹤中的任何JVM問題。

你的一個線程從DB

java.lang.Thread.State: RUNNABLE 
     at java.net.SocketInputStream.socketRead0(Native Method) 

這可能是什麼似乎掛等待響應。如果這是數據庫問題。這裏的可能性很少。最可能的原因包括:嚴重的性能問題,延遲連接鎖定的數據庫資源(這種情況有時會在您強行終止您的應用程序時發生)以及網絡問題。

+0

聽起來是這種情況...我如何確認鎖定的DB資源或網絡問題?性能問題我不這麼認爲...因爲代碼一直運行良好,直到昨天 – Lav

+0

@Lav:如果是由於連接不穩定導致的,最簡單的方法是重新啓動數據庫,看看是否修復它。要查看是否有網絡,請嘗試使用網絡的其他工具(如ping)也受到影響。對於性能而言,如果有對數據庫的寫入操作,這仍然是可能的(例如,您可以在表中添加更多行等) –

+0

將數據保存到數據庫時的性能一直是一個值得關注的問題....最近在應用程序中關閉。 ..因爲我們正在測試越來越多的數據...我打算開始多個線程...將結果保存在同一個表中...不確定這是否會導致一些數據庫級鎖定或擔心.. ..我將所有結果存儲在BlockingQueue中,並計劃啓動多個線程以將BlockingQueue保存到數據庫(全部在同一個表中) – Lav