Поток в Websphere Message Broker не освобождает ресурсы после завершения

Для проекта я создал несколько потоков сообщений в Websphere Message Broker 7. Один из этих потоков — довольно сложный поток с большим количеством вызовов и преобразований базы данных. Однако он работает правильно и довольно быстро, учитывая то, что ему нужно сделать.
Проблема в том, что пока он активен, он потребляет все больше и больше ресурсов, пока у брокера не закончится память. Даже если я использую небольшой тестовый пример, и он может завершиться до того, как произойдет сбой, ресурсы не будут освобождены. В этом случае я могу подтвердить вывод потока (это нормально), но операции сообщают, что он продолжает потреблять память.
Итак, я предполагаю утечку памяти. Я понятия не имею, как и где его найти. Может ли кто-нибудь указать мне направление, где искать?

Если необходима дополнительная информация, просто спросите. Я бы предпочел не помещать весь вычислительный узел в этот поток из-за его размера.


person Century    schedule 03.06.2015    source источник


Ответы (2)


То, что у вас высокое потребление памяти даже после завершения обработки, заставляет меня думать, что ваш поток сообщений имеет какое-то состояние, которое хранится в памяти через общие или статические переменные. Вы можете сохранять много данных в общих переменных в ESQL или статических переменных в Java в своем потоке.

Или, если вы используете JavaComputes, вы можете утечь ресурсы, такие как ResultSets.

Или это может быть какая-то ошибка, вам следует проверить наличие известных и устраненных утечек в пакетах исправлений, выпущенных для V7: http://www-01.ibm.com/support/docview.wss?&uid=swg27019145

person Attila Repasi    schedule 22.06.2015
comment
Спасибо за ваш ответ. Я обнаружил, что потоки не освобождают использованную память после завершения. Это встроенная вещь IBM, так что будущая обработка может использовать память без необходимости каждый раз запрашивать больше. Однако моя проблема, похоже, была вызвана некоторыми переменными среды, в которых хранится слишком много данных. По-видимому, вам нужно явно удалить данные из среды, когда вы закончите, чтобы вернуть ресурсы. Эта и некоторые другие очистки помогли сократить использование с 20 ГБ до примерно 400 МБ. - person Century; 01.07.2015

Как указано в моем комментарии выше, DataFlowEngine никогда не освобождает свои ресурсы после завершения. Это ветка IBM, объясняющая этот вопрос (пункт 8): http://www-01.ibm.com/support/docview.wss?uid=swg21665926#8

Кроме того, реальной проблемой, похоже, было использование переменных среды внутри цикла, который потреблял много памяти. Удаление переменных после использования — хорошая практика, которую я могу порекомендовать.

person Century    schedule 21.07.2016