O Cloud Profiler é um profiler estatístico de baixa sobrecarga que recolhe continuamente informações de utilização da CPU e de atribuição de memória das suas aplicações de produção. Para mais detalhes, consulte o artigo Conceitos de criação de perfis. Para resolver problemas ou monitorizar o desempenho do pipeline, use a integração do Dataflow com o Cloud Profiler para identificar as partes do código do pipeline que consomem mais recursos.
Para ver sugestões de resolução de problemas e estratégias de depuração para criar ou executar o pipeline do Dataflow, consulte o artigo Resolução de problemas e depuração de pipelines.
Antes de começar
Compreenda os conceitos de criação de perfis e familiarize-se com a interface do Profiler. Para ver informações sobre como começar a usar a interface do Profiler, consulte o artigo Selecione os perfis a analisar.
A API Cloud Profiler tem de estar ativada para o seu projeto antes de o trabalho ser iniciado.
É ativado automaticamente na primeira vez que visita a página do Profiler.
Em alternativa, pode ativar a API Cloud Profiler através da ferramenta de linha de comandos CLI gcloud gcloud
ou da Google Cloud consola.
Para usar o Cloud Profiler, o seu projeto tem de ter quota suficiente.
Além disso, a
conta de serviço do trabalhador
para a tarefa do Dataflow tem de ter
as autorizações adequadas para o Profiler. Por exemplo, para criar perfis, a conta de serviço do trabalhador tem de ter a autorização cloudprofiler.profiles.create
, que está incluída na função do IAM do agente do Cloud Profiler (roles/cloudprofiler.agent
).
Para mais informações, consulte o artigo Controlo de acesso com a IAM.
Ative o Cloud Profiler para pipelines do Dataflow
O Cloud Profiler está disponível para pipelines do Dataflow escritos no SDK do Apache Beam para Java e Python, versão 2.33.0 ou posterior. Os pipelines Python têm de usar o Dataflow Runner v2. O Cloud Profiler pode ser ativado na hora de início do pipeline. Espera-se que a sobrecarga de memória e CPU amortizada seja inferior a 1% para os seus pipelines.
Java
Para ativar a criação de perfis da CPU, inicie o pipeline com a seguinte opção.
--dataflowServiceOptions=enable_google_cloud_profiler
Para ativar a criação de perfis de memória, inicie o pipeline com as seguintes opções. A criação de perfis de memória requer o Java 11 ou superior.
--dataflowServiceOptions=enable_google_cloud_profiler
--dataflowServiceOptions=enable_google_cloud_heap_sampling
Python
Para usar o Cloud Profiler, o seu pipeline Python tem de ser executado com o Dataflow Runner v2.
Para ativar a criação de perfis da CPU, inicie o pipeline com a seguinte opção. A criação de perfis de memória dinâmica ainda não é suportada para Python.
--dataflow_service_options=enable_google_cloud_profiler
Go
Para ativar a criação de perfis de CPU e memória, inicie o pipeline com a seguinte opção.
--dataflow_service_options=enable_google_cloud_profiler
Se implementar os seus pipelines a partir de modelos do Dataflow e quiser ativar o Cloud Profiler,
especifique as flags enable_google_cloud_profiler
e
enable_google_cloud_heap_sampling
como experiências adicionais.
Consola
Se usar um modelo fornecido pela Google, pode especificar as flags na página Criar tarefa a partir do modelo do Dataflow no campo Experiências adicionais.
gcloud
Se usar a CLI do Google Cloud para executar modelos, use gcloud
dataflow jobs run
ou gcloud dataflow flex-template run
, consoante o tipo de modelo, use a opção --additional-experiments
para especificar as flags.
API
Se usar a API REST para executar modelos, consoante o tipo de modelo, especifique os sinalizadores através do campo additionalExperiments
do ambiente de execução, RuntimeEnvironment
ou FlexTemplateRuntimeEnvironment
.
Veja os dados de criação de perfis
Se o Cloud Profiler estiver ativado, é apresentado um link para a página do Profiler na página de tarefas.
Na página do criador de perfis, também pode encontrar os dados de criação de perfis para o pipeline do Dataflow. O Serviço é o nome da tarefa e a Versão é o ID da tarefa.
Usar o Cloud Profiler
A página Profiler contém um gráfico de chamas que apresenta estatísticas para cada frame em execução num trabalhador. Na direção horizontal, pode ver quanto tempo cada fotograma demorou a ser executado em termos de tempo da CPU. Na direção vertical, pode ver rastreios de pilha e código em execução em paralelo. Os rastreios de pilha são dominados pelo código da infraestrutura do executor. Para fins de depuração, estamos normalmente interessados na execução do código do utilizador, que se encontra normalmente perto das pontas inferiores do gráfico. O código do utilizador pode ser identificado através da procura de frames de marcadores, que representam o código do executor que se sabe que só chama o código do utilizador. No caso do executor do Beam ParDo, é criada uma camada de adaptador dinâmico para invocar a assinatura do método DoFn fornecida pelo utilizador. Esta camada pode ser identificada como um frame com o sufixo invokeProcessElement. A imagem seguinte mostra uma demonstração da localização de um frame de marcador.
Depois de clicar num frame de marcador interessante, o gráfico de chamas foca-se nesse rastreio da pilha, dando uma boa ideia do código do utilizador de execução prolongada. As operações mais lentas podem indicar onde se formaram restrições e apresentar oportunidades de otimização. No exemplo seguinte, é possível ver que o Global Windowing está a ser usado com um ByteArrayCoder. Neste caso, o programador pode ser uma boa área para otimização, uma vez que está a ocupar um tempo significativo da CPU em comparação com as operações ArrayList e HashMap.
Resolva problemas do Cloud Profiler
Se ativar o Cloud Profiler e o seu pipeline não gerar dados de criação de perfis, uma das seguintes condições pode ser a causa.
O seu pipeline usa uma versão mais antiga do Apache Beam SDK. Para usar o Cloud Profiler, tem de usar a versão 2.33.0 ou posterior do SDK do Apache Beam. Pode ver a versão do SDK Apache Beam do seu pipeline na página do trabalho. Se o seu trabalho for criado a partir de modelos do Dataflow, os modelos têm de usar as versões do SDK suportadas.
O seu projeto está a ficar sem quota do Cloud Profiler. Pode ver a utilização da quota na página de quota do seu projeto. Pode ocorrer um erro, como
Failed to collect and upload profile whose profile type is WALL
, se a quota do Cloud Profiler for excedida. O serviço Cloud Profiler rejeita os dados de criação de perfis se tiver atingido a sua quota. Para mais informações sobre as quotas do Cloud Profiler, consulte o artigo Quotas e limites.A sua tarefa não foi executada durante tempo suficiente para gerar dados para o Cloud Profiler. As tarefas executadas durante períodos curtos, como menos de cinco minutos, podem não fornecer dados de criação de perfis suficientes para o Cloud Profiler gerar resultados.
O agente do Cloud Profiler é instalado durante o arranque do worker do Dataflow. As mensagens de registo geradas pelo Cloud Profiler estão disponíveis no tipo de registo dataflow.googleapis.com/worker-startup
.
Por vezes, existem dados de criação de perfis, mas o Cloud Profiler não apresenta qualquer resultado. O Profiler apresenta uma mensagem semelhante a There were
profiles collected for the specified time range, but none match the current
filters
.
Para resolver este problema, experimente os seguintes passos de resolução de problemas.
Certifique-se de que o período e a hora de fim no Profiler incluem o tempo decorrido da tarefa.
Confirme se a tarefa correta está selecionada no criador de perfis. O Serviço é o nome do seu trabalho.
Confirme que a opção de pipeline
job_name
tem o mesmo valor que o nome do trabalho na página do trabalho do Dataflow.Se especificou um argumento service-name quando carregou o agente do Profiler, confirme se o nome do serviço está configurado corretamente.