#java #profiling #google-cloud-dataflow
#java #профилирование #google-облако-поток данных
Вопрос:
Есть ли у вас какие-либо идеи о том, как профилировать java-приложение, работающее на работнике потока данных? Знаете ли вы какие-либо инструменты, которые могут позволить мне обнаружить утечки памяти в моем приложении?
Ответ №1:
Для профилирования времени вы можете попробовать инструкции, описанные в этом выпуске 72, но могут возникнуть трудности с удалением или автоматическим масштабированием рабочих, прежде чем вы сможете получить профили от рабочего. К сожалению, он не обеспечивает профилирование памяти, поэтому это не поможет при утечках памяти.
Вы также можете запустить с DirectPipelineRunner
помощью , который будет выполнять конвейер локально на вашем компьютере. Это позволит вам профилировать код в вашем конвейере без необходимости иметь дело с рабочими потоками данных. В зависимости от масштаба конвейера вам, вероятно, потребуется настроить размер ввода, чтобы его можно было обрабатывать на одном компьютере.
Также может быть полезно попытаться различать код, который выполняется на рабочем сервере — например, код внутри одного DoFn
и структуру конвейера и данных. Например, проблемы с нехваткой памяти могут быть вызваны наличием GroupByKey
слишком большого количества значений, связанных с одним ключом, и считыванием их в список.