Apache Storm ShellBolt вызывает утечку памяти? - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть топология Apache Storm (v1.2.1), которая использует ShellBolt для выполнения сценария Python (также использует storm-multilang: 1.2.1).

Проблема заключается в том, что на машине заканчиваетсяпамять и рабочий сбой.

/var/log/syslog показывает, что ядро ​​жертвует дочерним процессом (обычно процессом python), потому что ему не хватает памяти.

При просмотре top я вижу, что процессы python остаются стабильно используемыми в памяти, но процесс штормового Java постоянно увеличивается, пока рабочий не падает.

Рабочий падает, потому что ShellBolt умирает(потому что ядро ​​убивает процесс python).

При просмотре сводных панелей netdata я вижу, что использование ОЗУ просто увеличивается, и увеличивается и увеличивается количество обработанных кортежей.

Когда я подключаю VisualVMдля работника я вижу, что куча используется только на 50%.Таким образом, похоже, что проблема связана с использованием памяти вне кучи (?).

Я не использую специальный сериализатор для передачи сообщений в / из болта.

Кортеж содержит: [string, jsonified map, base 64 encoded string]

Мой питон-болт испускает дважды, по одному разу на два разных потока.Один испускает: [string, dict], а другой: [string, dict, dict] Ни один из диктов не очень большой.Самый большой из них имеет 5 ключей, все значения малы.

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

Как я могу найти утечку памяти и устранить ее?Это проблема ShellBolt?

...