BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 20 июн 2025, 03:25

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: [BUG] ActiveMQ Consumer deadlock
СообщениеДобавлено: 18 ноя 2016, 13:15 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Привет.

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

Хочется комментарий разработчиков. Неприятная штука.
По ссылкам вроде пишут, что это фича, и нефиг распараллеливать работу с консумером.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [BUG] ActiveMQ Consumer deadlock (CRM)
СообщениеДобавлено: 21 ноя 2016, 21:44 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
При инициализации класса добавлялись слушатели на определенные события.
Но инициализация класса (первое обращение) могла произойти в потоке обработки событий. И в этом случае мог произойти deadlock.
Поменяли на добавление слушателей в отдельном потоке. С 6.0 этот блок уже выполнялся в отдельном потоке, видимо забыли на 5.2 перенести.

Выложили обновление.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [BUG] ActiveMQ Consumer deadlock (CRM)
СообщениеДобавлено: 22 ноя 2016, 07:32 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Спасибо, обновлюсь в декабре наверное.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [BUG] ActiveMQ Consumer deadlock (CRM)
СообщениеДобавлено: 20 янв 2017, 07:30 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Обновился, будем посмотреть :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.050s | 23 Queries | GZIP : On ]