Привет.
ActiveMQ 5.4.2
Сервер: вер. 5.2 сборка 1645 от 16.08.2016 17:11:56
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_26
Впервые столкнулся с проблемой месяц назад:
Цитата:
позвонил менеждер с клиентом хххх
у него после установки лимита не поправились лимиты на субдоговорах и не включился инет.
Поправил его руками - сел разбираться.
Судя по логам, в 13:41 перестали обрабатываться события PaymentEvent и некотрые другие (расходы и т.п.).
Смотрю через JMX ActiveMQ queue - есть consumer, но всё равно висят и копятся сообщения.
В сервере ошибок нет в логах.
Сделал jstack сервера, вижу повисший тред на чтении очереди:
Код:
"ActiveMQ Session Task" prio=10 tid=0x0000000041ee1000 nid=0x7b83 waiting for monitor entry [0x00007fcbf15d4000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.activemq.SimplePriorityMessageDispatchChannel.dequeueNoWait(SimplePriorityMessageDispatchChannel.java:105)
- waiting to lock <0x0000000780edf298> (a java.lang.Object)
at org.apache.activemq.ActiveMQMessageConsumer.iterate(ActiveMQMessageConsumer.java:1360)
at org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:194)
at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
Попробовал дёрнуть соответствующий Connection через JMX - не помогает.
Гугл тоже не даёт ответа.
Перезапущу сервер после 18:00.
Больше не знаю, куда рыть.
Не припомню такого раньше, надеюсь, не повторится.
-
Повторилось сегодня один-в-один:
Код:
"ActiveMQ Session Task" prio=10 tid=0x0000000046f8c800 nid=0x742c waiting for monitor entry [0x00007fc4b9d04000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.activemq.SimplePriorityMessageDispatchChannel.dequeueNoWait(SimplePriorityMessageDispatchChannel.java:105)
- waiting to lock <0x0000000780d87b58> (a java.lang.Object)
at org.apache.activemq.ActiveMQMessageConsumer.iterate(ActiveMQMessageConsumer.java:1360)
at org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:194)
at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
"tariff-option-worker" prio=10 tid=0x00007fc4ac062800 nid=0x48e8 in Object.wait() [0x00007fc4b949d000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x0000000780ec2f68> (a java.lang.Object)
at java.lang.Object.wait(Object.java:485)
at org.apache.activemq.SimplePriorityMessageDispatchChannel.dequeue(SimplePriorityMessageDispatchChannel.java:87)
- locked <0x0000000780ec2f68> (a java.lang.Object)
at org.apache.activemq.ActiveMQMessageConsumer.dequeue(ActiveMQMessageConsumer.java:452)
at org.apache.activemq.ActiveMQMessageConsumer.receive(ActiveMQMessageConsumer.java:504)
at ru.bitel.bgbilling.kernel.event.EventWorker.internalRunWorker(EventWorker.java:130)
- locked <0x00000007811a4e70> (a ru.bitel.bgbilling.kernel.event.Consumer)
at ru.bitel.bgbilling.kernel.event.EventWorker.runImpl(EventWorker.java:90)
- locked <0x00000007811a4df8> (a ru.bitel.bgbilling.kernel.tariff.option.server.TariffOptionWorker)
at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:54)
at java.lang.Thread.run(Thread.java:662)
"card-activate-worker" prio=10 tid=0x00007fc4b4ad0800 nid=0x4756 in Object.wait() [0x00007fc4b95fd000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x0000000780188478> (a java.lang.Object)
at java.lang.Object.wait(Object.java:485)
at org.apache.activemq.SimplePriorityMessageDispatchChannel.dequeue(SimplePriorityMessageDispatchChannel.java:87)
- locked <0x0000000780188478> (a java.lang.Object)
at org.apache.activemq.ActiveMQMessageConsumer.dequeue(ActiveMQMessageConsumer.java:452)
at org.apache.activemq.ActiveMQMessageConsumer.receive(ActiveMQMessageConsumer.java:504)
at ru.bitel.bgbilling.kernel.event.EventWorker.internalRunWorker(EventWorker.java:130)
- locked <0x0000000780cf7618> (a ru.bitel.bgbilling.kernel.event.AcknowledgeConsumer)
at ru.bitel.bgbilling.kernel.event.EventWorker.runImpl(EventWorker.java:90)
- locked <0x0000000780cf7598> (a ru.bitel.bgbilling.modules.card.server.CardActivateWorker)
at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:54)
at java.lang.Thread.run(Thread.java:662)
(два последних треда на всякий случай скопипастил, но по-моему, это не относится)
- рестартовал сервер, но он почти сразу снова повис:
Код:
"dyn-clss-evnt-lstnr-p-5-t-1" prio=10 tid=0x00007ff1a9359000 nid=0x3c97 waiting for monitor entry [0x00007ff1a4caf000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.activemq.SimplePriorityMessageDispatchChannel.stop(SimplePriorityMessageDispatchChannel.java:143)
- waiting to lock <0x00000007fdf7ea50> (a java.lang.Object)
at org.apache.activemq.ActiveMQMessageConsumer.stop(ActiveMQMessageConsumer.java:1342)
at org.apache.activemq.ActiveMQSession.stop(ActiveMQSession.java:1649)
at org.apache.activemq.ActiveMQMessageConsumer.setMessageListener(ActiveMQMessageConsumer.java:407)
at ru.bitel.bgbilling.kernel.event.AbstractConsumer.<init>(AbstractConsumer.java:142)
at ru.bitel.bgbilling.kernel.event.Consumer.<init>(Consumer.java:64)
at ru.bitel.bgbilling.kernel.event.EventProcessor.getConsumer(EventProcessor.java:495)
at ru.bitel.bgbilling.kernel.event.EventProcessor.addListener0(EventProcessor.java:426)
at ru.bitel.bgbilling.kernel.event.EventProcessor.addListener(EventProcessor.java:303)
at ru.bitel.bgbilling.kernel.event.EventProcessor.addListener(EventProcessor.java:279)
at ru.bitel.bgbilling.kernel.event.EventProcessor.addListener(EventProcessor.java:273)
at ru.bitel.oss.kernel.entity.server.bean.AbstractEntityAttrDao$AddressItemModifiedEventListener.<init>(AbstractEntityAttrDao.java:872)
at ru.bitel.bgbilling.kernel.contract.api.server.bean.ContractDao$1.<init>(ContractDao.java:166)
at ru.bitel.bgbilling.kernel.contract.api.server.bean.ContractDao.<clinit>(ContractDao.java:166)
...
Нашёл в гугле такое по запросу "SimplePriorityMessageDispatchChannel deadlock":
https://issues.apache.org/jira/browse/AMQ-3760https://issues.apache.org/jira/browse/AMQ-5409http://stackoverflow.com/questions/2382 ... cked-stateХочется комментарий разработчиков. Неприятная штука.
По ссылкам вроде пишут, что это фича, и нефиг распараллеливать работу с консумером.