这两天dubbo出现突然挂掉的现象。异常如下:
[DUBBO] Thread pool is EXHAUSTED! Thread Name: DubboServerHandler-192.168.2.187:20880, Pool Size: 200 (active: 200, core: 200, max: 200, largest: 200), Task: 6294 (completed: 6094), Executor status:(isShutdown:false, isTerminated:false, isTerminating:false), in dubbo://192.168.2.187:20880!, dubbo version: 2.5.3, current host: 192.168.2.187
然后使用jstack ‘pid’>xxx.log查看日志:
DubboServerHandler-192.168.2.187:20880-thread-192" #232 daemon prio=5 os_prio=0 tid=0x00007fe844056000 nid=0x12e3 waiting for monitor entry [0x00007fe825958000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.springframework.jms.connection.SingleConnectionFactory.getConnection(SingleConnectionFactory.java:281)
- waiting to lock <0x00000000fd9b9bc0> (a java.lang.Object)
at org.springframework.jms.connection.SingleConnectionFactory.createConnection(SingleConnectionFactory.java:224)
at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:180)
at org.springframework.jms.core.JmsTemplate.access$600(JmsTemplate.java:90)
at org.springframework.jms.core.JmsTemplate$JmsTemplateResourceFactory.createConnection(JmsTemplate.java:1177)
at org.springframework.jms.connection.ConnectionFactoryUtils.doGetTransactionalSession(ConnectionFactoryUtils.java:312)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:471)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:559)
at com.hginfo.hbm.be.service.impl.nb.jms.NbJmsServiceImpl.sendPerformanceMessage(NbJmsServiceImpl.java:73)
at com.hginfo.hbm.be.service.impl.nb.jms.NbJmsServiceImpl.sendMessage(NbJmsServiceImpl.java:56)
at com.hginfo.hbm.be.service.impl.nb.jms.NbJmsServiceImpl$$FastClassBySpringCGLIB$$78ff2af8.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:52)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:280)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at com.alibaba.druid.support.spring.stat.DruidStatInterceptor.invoke(DruidStatInterceptor.java:72)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
at com.hginfo.hbm.be.service.impl.nb.jms.NbJmsServiceImpl$$EnhancerBySpringCGLIB$$869e41d8.sendMessage(<generated>)
at com.hginfo.hbm.be.service.impl.nb.NbMQServiceImpl.doDcCommonReport(NbMQServiceImpl.java:479)
at com.hginfo.hbm.be.service.impl.nb.NbMQServiceImpl.saveDeviceReport(NbMQServiceImpl.java:79)
at com.hginfo.hbm.be.service.impl.nb.NbMQServiceImpl$$FastClassBySpringCGLIB$$98ff479c.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
重点:java.lang.Thread.State: BLOCKED (on object monitor)
dubbo的线程被activemq连接的线程所阻塞。
发现问题出在activemq上,amq作为轻量级中间件,cpu很少耗尽,推测为amq配置问题,增加内存:set ACTIVEMQ_OPTS=-Xms1G-Xmx1G。
问题解决,bubbo不再挂掉。