2014-03-19 89 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