|
|
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
Всем привет! Столкнулся с проблемой. Есть некий продукт, который использует axis2 jms транспорт. Данный продукт выступает в роли клиентской стороны (относительно брокера), создает до 3000 консюмеров, используя брокер - ActiveMq. Использовал различные опции тюнинга на клиенсткой стороне..(различные опции jms кеширования, время ожидания и тд..немного даже код подправил у транспорта) В итоге добился того, что первая тысяча консюмером создается влет - около 10 секунд. Далее начинаются проблемы, каждый новый консюмер создается всё дольше и дольше. Доходит до 1500 тысяч и дальше глухо.. , но всё же продолжает работать. В создании консюмером исползуется пул тредов, который настраивается через проперти транспорта. В пропертях тоже выставил min и core размер пула тредов.. В JVM, в связи с большим числом тредов увеличил параметр -Xss. в jms использую nio транспорт. Ничего не помогает:( В логах сервера (который создает консюмеры) вижу в конце концов такой вот лог: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 12:51:24 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
livehacker, Проанализировав, куда уходит время на создание нового консюмера, выяснил, что долго создается поток для консюмера. С чем это может быть связано? Тестил под виндой и линуксом, результаты одинаковы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 12:53:39 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
Xss это же размер стека для одного потока (1Мб по дефолту?). Соответственно 1500 потоков это около 1.5Гб. Память банально заканчивается. Зачем вам столько консюмеров? Сколько выделено памяти на процесс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:00:24 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, "Сколько выделено памяти на процесс?" - что вы под этим подразумеваете? Я выделял для jvm до 5 гигабайт памяти. Сжирала максимум 3 гига.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:07:28 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
Странно что создаётся поток на каждого консюмера. Как вы это обнаружили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:14:52 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, В каком месте память заканчивается? Я обеспечил ресурсы для данной задачи. Пул тредов большой, памяти предостаточно и ещё остается.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:15:04 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, В коде AXI2 Jms транспорта. Если интересно, org.apache.axis2.transport.jms.JMSListener, метод startEndpoint. На каждый листнер консюмера - новый тред. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:18:14 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
livehackerВ каком месте память заканчивается? Я обеспечил ресурсы для данной задачи. Пул тредов большой, памяти предостаточно и ещё остается.. Вы выдаёте минимум информации. Я отвечаю предположением. Вы сказали что на каждого консюмера создаётся новый поток. Тысячи потоков это серьезное потребление по памяти. Отсюда предположение. Под профайлером посмотреть, когда создание тормозит, пробовали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:22:41 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, "Под профайлером посмотреть, когда создание тормозит, пробовали?" К сожалению, не пробовал. Но я запускал проект под дебаг левелом, натыкал в код аксиса различных логов и выяснил, что когда начинается замедление создания нового консюмера, то время уходит именно на создание треда. Ничего больше.. Ещё я пробовал создавать консюмеры просто из юнит теста. Но код был очень простой без использования того нагромождения, которое находится в сендере и рецивере аксис 2 транспорта. Идея наплодила 3000 консюмеров и листнеров и всё работало хорошо. С учетом того, что для каждого консюмера нужен ещё листнер получилось в сумме 6000 потоков. Те в самой-самой облегченной версии, всё работало удачно. Но не axis транспортом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:28:06 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
livehackerВ коде AXI2 Jms транспорта. Если интересно, org.apache.axis2.transport.jms.JMSListener, метод startEndpoint. На каждый листнер консюмера - новый тред. Мда, Axis2 редкостная дрянь. Уже в третий раз убеждаюсь. Не знаю какая у вас версия, но вот тут http://www.docjar.com/html/api/org/apache/axis2/transport/jms/JMSListener.java.html создаётся пул на каждого слушаетеля. А это даже иногда более одного потока, если у вас 3000 этих слушателей. А покажите stacktrace до startEndpoint. Откуда оно создаётся? Может JMSListener на каждого консюмера и не нужен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:30:01 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
Надо понять зачем столько JMSListener-ов создаётся. По-моему их не должно быть много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:36:01 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
Настройка transport.jms.CacheLevel ни на что не влияет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:36:48 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Тот код, на который вы дали ссылку, вообще жесть:) Вот этот, который у меня: http://svn.apache.org/repos/asf/axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSListener.java Cейчас скину стэк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:38:46 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Нет, не влияет.. Я с ней игрался уже. Что польное кеширование, что "none", не помогло. Столько консюмеров нужно, тк много различных сервисов. Их действительно так очень много! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:41:48 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
livehacker, Если вы посмотрите внимательно код: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. То увидите, что стоит секундная задержка. Это я убрал в коде, чтобы быстрее создавались консюмеры. Но если более детально смотреть код аксиса, то есть ещё недочеты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:43:53 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
livehackerВот этот, который у меня: http://svn.apache.org/repos/asf/axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSListener.java И где там создаётся поток? ServiceTaskManager вроде реюзабельный. Нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:45:25 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, в ServiceTaskManager.run() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:45:58 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
livehacker, а нельзя одного консьюмера на весь прием заюзать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:47:54 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
Так почему новый ServiceTaskManager создаётся? Нельзя его несколько раз переиспользовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:48:18 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
Blazkowicz , помнишь у меня то же самое но для продьюсера было ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:50:46 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Там для каждого ендпоинта свой ServiceTaskManager. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:52:14 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
justforsqlrulivehacker, а нельзя одного консьюмера на весь прием заюзать ? Это технически сложно очень.. Либо свой транспорт написать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:53:04 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
livehacker, http://www.sql.ru/forum/actualthread.aspx?tid=916850&hl=producer ну вот примерно то же но при отправке решили использованием одного продьюсера при отправке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:54:09 |
|
||
|
ActiveMQ, создание большого числа консюмеров
|
|||
|---|---|---|---|
|
#18+
livehackerТам для каждого ендпоинта свой ServiceTaskManager. 1 endpoint это один Web Service. Учитывая, что у вас клиентская часть, то она связывается с 3000 веб сервисами? Я правильно понял архитектуру? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.02.2012, 13:57:30 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37684201&tid=2132440]: |
0ms |
get settings: |
21ms |
get forum list: |
20ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
44ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
99ms |
get tp. blocked users: |
3ms |
| others: | 377ms |
| total: | 595ms |

| 0 / 0 |
