实战Java分析:Hang in maven test

来源:互联网 发布:微信中打开淘宝链接 编辑:程序博客网 时间:2024/05/22 02:24

今天分享一个简单的hang的maven测试例子,download了系统代码之后发现系统load过程中,mvn 的unit test跑着跑着hang住了,试了2次都是一样,有段时间没完系统了,一下不太想得明白原因,就dump thread分析了下,记录下实践过程:

1. 系统是unix的,直接使用 ps -aux命令找到挂掉的java进程

  ps -aux
root      2958  6.4  4.9 2107828 87636 pts/1   Sl+  09:23   0:10 java -agentpath

2. 用jstack命令dump java进程中的thread,很容易就发现了main thread在等待socketRead0数据,这个等待是ehcache的PeerListener引起的,因为mvn的unit test没有启动2个应用做测试,当然是等待通不过了,把unit test的配置脚本修改成单节点测试后,问题得到解决。

[root@cloudlu CustomerSecurityManagementDAO]# jstack 2958

2014-10-14 09:26:12Full thread dump OpenJDK 64-Bit Server VM (24.65-b04 mixed mode):"main" prio=10 tid=0x00007f963c019800 nid=0xb91 runnable [0x00007f9642658000]   java.lang.Thread.State: RUNNABLE    at java.net.SocketInputStream.socketRead0(Native Method)    at java.net.SocketInputStream.read(SocketInputStream.java:152)    at java.net.SocketInputStream.read(SocketInputStream.java:122)    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)    at java.io.BufferedInputStream.read(BufferedInputStream.java:254)    - locked <0x00000000cc0077a8> (a java.io.BufferedInputStream)    at java.io.DataInputStream.readByte(DataInputStream.java:265)    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:214)    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:378)    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)    at java.rmi.Naming.rebind(Naming.java:177)    at net.sf.ehcache.distribution.RMICacheManagerPeerListener.bind(RMICacheManagerPeerListener.java:234)    at net.sf.ehcache.distribution.RMICacheManagerPeerListener.notifyCacheAdded(RMICacheManagerPeerListener.java:536)    at net.sf.ehcache.event.CacheManagerEventListenerRegistry.notifyCacheAdded(CacheManagerEventListenerRegistry.java:159)    at net.sf.ehcache.CacheManager.addCacheNoCheck(CacheManager.java:1346)    at net.sf.ehcache.CacheManager.addConfiguredCaches(CacheManager.java:758)    at net.sf.ehcache.CacheManager.doInit(CacheManager.java:459)    at net.sf.ehcache.CacheManager.init(CacheManager.java:377)    - locked <0x00000000da5566c0> (a net.sf.ehcache.CacheManager)    at net.sf.ehcache.CacheManager.<init>(CacheManager.java:259)    at net.sf.ehcache.CacheManager.newInstance(CacheManager.java:1037)    - locked <0x00000000da556878> (a java.lang.Class for net.sf.ehcache.CacheManager)    at net.sf.ehcache.CacheManager.newInstance(CacheManager.java:818)    at net.sf.ehcache.CacheManager.create(CacheManager.java:799)    - locked <0x00000000da556878> (a java.lang.Class for net.sf.ehcache.CacheManager)    at org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory.start(SingletonEhCacheRegionFactory.java:73)    at org.hibernate.internal.CacheImpl.<init>(CacheImpl.java:70)    at org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:40)    at org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:35)    at org.hibernate.service.internal.SessionFactoryServiceRegistryImpl.initiateService(SessionFactoryServiceRegistryImpl.java:91)    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:177)    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:151)    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:132)    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:264)    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1794)    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1865)    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:343)    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:431)    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:416)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)    - locked <0x00000000d9f68c78> (a java.util.concurrent.ConcurrentHashMap)    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1456)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1197)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)    - locked <0x00000000d9f68c78> (a java.util.concurrent.ConcurrentHashMap)    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedMap(BeanDefinitionValueResolver.java:384)    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:165)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1456)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1197)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)    - locked <0x00000000d9f68c78> (a java.util.concurrent.ConcurrentHashMap)    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)    - locked <0x00000000d9f621b0> (a java.lang.Object)    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:125)    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:100)    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:250)    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64)    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91)    - locked <0x00000000d9f25308> (a org.springframework.test.context.ContextCache)    at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.java:101)    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:331)    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:213)    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:290)    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:292)    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:233)    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:87)    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:176)    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)"VM Thread" prio=10 tid=0x00007f963c0a2800 nid=0xb92 runnable "VM Periodic Task Thread" prio=10 tid=0x00007f963c341800 nid=0xb99 waiting on conditionJNI global references: 327


0 0
原创粉丝点击