Профилирование Java-приложения, работающего в потоке данных Google

#java #profiling #google-cloud-dataflow

#java #профилирование #google-облако-поток данных

Вопрос:

Есть ли у вас какие-либо идеи о том, как профилировать java-приложение, работающее на работнике потока данных? Знаете ли вы какие-либо инструменты, которые могут позволить мне обнаружить утечки памяти в моем приложении?

Ответ №1:

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

Вы также можете запустить с DirectPipelineRunner помощью , который будет выполнять конвейер локально на вашем компьютере. Это позволит вам профилировать код в вашем конвейере без необходимости иметь дело с рабочими потоками данных. В зависимости от масштаба конвейера вам, вероятно, потребуется настроить размер ввода, чтобы его можно было обрабатывать на одном компьютере.

Также может быть полезно попытаться различать код, который выполняется на рабочем сервере — например, код внутри одного DoFn и структуру конвейера и данных. Например, проблемы с нехваткой памяти могут быть вызваны наличием GroupByKey слишком большого количества значений, связанных с одним ключом, и считыванием их в список.