Cloud Profiler es un generador de perfiles estadístico de baja sobrecarga que recoge continuamente información sobre el uso de la CPU y la asignación de memoria de tus aplicaciones en producción. Para obtener más información, consulta Conceptos de creación de perfiles. Para solucionar problemas o monitorizar el rendimiento de una canalización, usa la integración de Dataflow con Cloud Profiler para identificar las partes del código de la canalización que consumen más recursos.
Para obtener consejos sobre cómo solucionar problemas y estrategias de depuración para crear o ejecutar tu canalización de Dataflow, consulta el artículo Solucionar problemas y depurar canalizaciones.
Antes de empezar
Consulta los conceptos de creación de perfiles y familiarízate con la interfaz de Profiler. Para obtener información sobre cómo empezar a usar la interfaz del creador de perfiles, consulta Seleccionar los perfiles que se van a analizar.
La API Cloud Profiler debe estar habilitada en tu proyecto antes de que se inicie el trabajo.
Se habilita automáticamente la primera vez que visitas la página del generador de perfiles.
También puedes habilitar la API Cloud Profiler con la herramienta de línea de comandos CLI de Google Cloud gcloud
o la consola Google Cloud .
Para usar Cloud Profiler, tu proyecto debe tener suficiente cuota.
Además, la cuenta de servicio de trabajador de la tarea de Dataflow debe tener los permisos adecuados para Profiler. Por ejemplo, para crear perfiles, la cuenta de servicio del trabajador debe tener el permiso cloudprofiler.profiles.create
, que se incluye en el rol de gestión de identidades y accesos del agente de Cloud Profiler (roles/cloudprofiler.agent
).
Para obtener más información, consulta Control de acceso con IAM.
Habilitar Cloud Profiler para las canalizaciones de Dataflow
Cloud Profiler está disponible para las canalizaciones de Dataflow escritas en el SDK de Apache Beam para Java y Python, versión 2.33.0 o posterior. Los flujos de procesamiento de Python deben usar Dataflow Runner v2. Cloud Profiler se puede habilitar al inicio de la canalización. Se espera que la sobrecarga amortizada de CPU y memoria sea inferior al 1% en tus canalizaciones.
Java
Para habilitar la creación de perfiles de CPU, inicia la canalización con la siguiente opción.
--dataflowServiceOptions=enable_google_cloud_profiler
Para habilitar la creación de perfiles de montículo, inicia la canalización con las siguientes opciones. Para crear perfiles de montículo, se necesita Java 11 o una versión posterior.
--dataflowServiceOptions=enable_google_cloud_profiler
--dataflowServiceOptions=enable_google_cloud_heap_sampling
Python
Para usar Cloud Profiler, tu flujo de procesamiento de Python debe ejecutarse con Runner v2 de Dataflow.
Para habilitar la creación de perfiles de CPU, inicia la canalización con la siguiente opción. El perfilado de montículos aún no se admite en Python.
--dataflow_service_options=enable_google_cloud_profiler
Go
Para habilitar la creación de perfiles de CPU y montículo, inicia la canalización con la siguiente opción.
--dataflow_service_options=enable_google_cloud_profiler
Si despliega sus flujos de trabajo desde plantillas de Dataflow y quiere habilitar Cloud Profiler, especifique las marcas enable_google_cloud_profiler
y enable_google_cloud_heap_sampling
como experimentos adicionales.
Consola
Si usas una plantilla proporcionada por Google, puedes especificar las marcas en el campo Experimentos adicionales de la página Crear trabajo a partir de plantilla de Dataflow.
gcloud
Si usas Google Cloud CLI para ejecutar plantillas, ya sea gcloud
dataflow jobs run
o gcloud dataflow flex-template run
, en función del tipo de plantilla, usa la opción --additional-experiments
para especificar las marcas.
API
Si usas la API REST para ejecutar plantillas, en función del tipo de plantilla, especifica las marcas mediante el campo additionalExperiments
del entorno de ejecución, ya sea RuntimeEnvironment
o FlexTemplateRuntimeEnvironment
.
Ver los datos de creación de perfiles
Si Cloud Profiler está habilitado, se muestra un enlace a la página Profiler en la página del trabajo.
En la página Profiler, también puedes encontrar los datos de creación de perfiles de tu flujo de procesamiento de Dataflow. El servicio es el nombre de tu trabajo y la versión es el ID de tu trabajo.
Usar Cloud Profiler
La página de creación de perfiles contiene un gráfico de llamas que muestra estadísticas de cada marco que se ejecuta en un trabajador. En la dirección horizontal, puedes ver cuánto tiempo ha tardado en ejecutarse cada fotograma en términos de tiempo de CPU. En la dirección vertical, puedes ver los rastreos de pila y el código que se ejecuta en paralelo. Los seguimientos de pila están dominados por el código de infraestructura del runner. Para depurar, solemos centrarnos en la ejecución del código de usuario, que normalmente se encuentra cerca de los extremos inferiores del gráfico. El código de usuario se puede identificar buscando marcos de marcador, que representan el código del runner que solo llama al código de usuario. En el caso del runner de Beam ParDo, se crea una capa de adaptador dinámico para invocar la firma del método DoFn proporcionada por el usuario. Esta capa se puede identificar como un marco con el sufijo invokeProcessElement. En la siguiente imagen se muestra cómo encontrar un fotograma de marcador.
Después de hacer clic en un marco de marcador interesante, el gráfico de llamas se centra en ese seguimiento de pila, lo que permite hacerse una idea del código de usuario de larga duración. Las operaciones más lentas pueden indicar dónde se han formado cuellos de botella y ofrecer oportunidades de optimización. En el siguiente ejemplo, se puede ver que se está usando Global Windowing con un ByteArrayCoder. En este caso, el codificador podría ser un buen área de optimización, ya que ocupa una cantidad significativa de tiempo de CPU en comparación con las operaciones de ArrayList y HashMap.
Solucionar problemas de Cloud Profiler
Si habilitas Cloud Profiler y tu canalización no genera datos de creación de perfiles, puede deberse a una de las siguientes condiciones.
Tu canalización usa una versión anterior del SDK de Apache Beam. Para usar Cloud Profiler, debe usar la versión 2.33.0 del SDK de Apache Beam o una posterior. Puedes ver la versión del SDK de Apache Beam de tu flujo de procesamiento en la página del trabajo. Si tu tarea se crea a partir de plantillas de Dataflow, estas deben usar las versiones compatibles del SDK.
Tu proyecto se está quedando sin cuota de Cloud Profiler. Puedes consultar el uso de la cuota en la página de cuotas de tu proyecto. Si se supera la cuota de Cloud Profiler, puede producirse un error como
Failed to collect and upload profile whose profile type is WALL
. El servicio Cloud Profiler rechaza los datos de creación de perfiles si has alcanzado tu cuota. Para obtener más información sobre las cuotas de Cloud Profiler, consulta Cuotas y límites.Tu trabajo no se ha ejecutado durante el tiempo suficiente para generar datos de Cloud Profiler. Es posible que las tareas que se ejecutan durante poco tiempo (por ejemplo, menos de cinco minutos) no proporcionen suficientes datos de creación de perfiles para que Cloud Profiler genere resultados.
El agente de Cloud Profiler se instala durante el inicio del trabajador de Dataflow. Los mensajes de registro generados por Cloud Profiler están disponibles en el tipo de registro dataflow.googleapis.com/worker-startup
.
A veces, hay datos de creación de perfiles, pero Cloud Profiler no muestra ningún resultado. El profiler muestra un mensaje similar a There were
profiles collected for the specified time range, but none match the current
filters
.
Para solucionar este problema, prueba los siguientes pasos.
Asegúrate de que el intervalo de tiempo y la hora de finalización del generador de perfiles incluyan el tiempo transcurrido del trabajo.
Confirma que se ha seleccionado el trabajo correcto en el generador de perfiles. El servicio es el nombre de tu trabajo.
Confirma que la opción de
job_name
pipeline tiene el mismo valor que el nombre del trabajo en la página de trabajo de Dataflow.Si has especificado un argumento service-name al cargar el agente de Profiler, confirma que el nombre del servicio esté configurado correctamente.