forum.bitel.ru http://forum.bitel.ru/ |
|
[BUG] ActiveMQ Consumer deadlock (CRM) http://forum.bitel.ru/viewtopic.php?f=22&t=12106 |
Страница 1 из 1 |
Автор: | Cromeshnic [ 18 ноя 2016, 13:15 ] |
Заголовок сообщения: | [BUG] ActiveMQ Consumer deadlock |
Привет. 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-3760 https://issues.apache.org/jira/browse/AMQ-5409 http://stackoverflow.com/questions/2382 ... cked-state Хочется комментарий разработчиков. Неприятная штука. По ссылкам вроде пишут, что это фича, и нефиг распараллеливать работу с консумером. |
Автор: | Amir [ 21 ноя 2016, 21:44 ] |
Заголовок сообщения: | Re: [BUG] ActiveMQ Consumer deadlock (CRM) |
При инициализации класса добавлялись слушатели на определенные события. Но инициализация класса (первое обращение) могла произойти в потоке обработки событий. И в этом случае мог произойти deadlock. Поменяли на добавление слушателей в отдельном потоке. С 6.0 этот блок уже выполнялся в отдельном потоке, видимо забыли на 5.2 перенести. Выложили обновление. |
Автор: | Cromeshnic [ 22 ноя 2016, 07:32 ] |
Заголовок сообщения: | Re: [BUG] ActiveMQ Consumer deadlock (CRM) |
Спасибо, обновлюсь в декабре наверное. |
Автор: | Cromeshnic [ 20 янв 2017, 07:30 ] |
Заголовок сообщения: | Re: [BUG] ActiveMQ Consumer deadlock (CRM) |
Обновился, будем посмотреть ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |