Мониторинг рабочих сбоев в шторме апачей
При работе в кластере, если что-то происходит неправильно, рабочий обычно умирает (останов JVM). Это может быть вызвано многими факторами, большую часть времени это сложная задача (самая большая проблема с бурей?), Чтобы выяснить причину аварии.
Разумеется, штурмовик перезапускает мертвых рабочих, а жизнедеятельность довольно хороша в штормовом кластере, но рабочий крушение - это беспорядок, которого мы должны избегать, поскольку он добавляет накладные расходы, латентность (может быть очень долго, пока рабочий не будет найден мертвым и респаун) и потерю данных, если вы не разработали свою топологию для предотвращения этого.
Есть ли простой способ/инструмент/методология для проверки того, когда и, возможно, из-за сбоя штормового работника? Они не отображаются во время шторма (в то время как наблюдатели показаны), и все требует ручного мониторинга (например, с помощью jstack + JVM opts) с большой осторожностью.
Вот некоторые случаи, которые могут произойти:
- таймауты и множество возможных причин: медленная сборка мусора java, плохая сеть, плохая калибровка в конфигурации тайм-аута. Единственным результатом, который мы получаем из журналов супервизора, является "состояние: тайм-аут" или "состояние: запрещено", которое плохое. Также, когда рабочий умирает, статистика по шторму-ui перезагружается. Поскольку вы боитесь тайм-аутов, вы в конечном итоге используете длинные, которые, похоже, не являются хорошим решением для обработки в реальном времени.
- высокое противодавление с неожиданным поведением, голодные рабочие биения сердца и, например, индуцирование тайм-аута. Acking, кажется, единственный способ справиться с противодавлением и нуждается в хорошем изготовлении болтов в соответствии с вашей нагрузкой. Не похоже на то, что это не так, как если бы это действительно привело к краху рабочих и привело к плохим результатам в конце (даже меньше обрабатываемых данных, чем топология подкачки под давлением?).
- исключений для выполнения кода, иногда не отображаемых в storm-ui, которые требуют ручной проверки журналов приложений (самый простой случай).
- утечки памяти, которые можно обнаружить с помощью JVM-дампов.
Ответы
Ответ 1
Наблюдатель бури регистрирует перезапуск по тайм-ауту.
вы можете отслеживать журнал супервизора, также вы можете отслеживать эффективность метода выполнения затвора (кортежа).
Что касается утечки памяти, так как диспетчер бури убивает -9 рабочий, куча кучи может быть повреждена, поэтому я буду использовать инструменты, которые будут динамически отслеживать вашу кучу или убивать супервизора для создания кучи с помощью jmap. Также попробуйте следить за журналами gc.
Я по-прежнему рекомендую увеличить время ожидания по умолчанию.