Resolver problemas

Nesta página, mostramos como resolver problemas com o Cloud Profiler.

Erros com a configuração do seu projeto do Google Cloud

Nesta seção, listamos problemas de configuração que você pode encontrar e fornecemos sugestões de como corrigir cada um deles.

A API Cloud Profiler está desativada

O seguinte erro ocorre quando a API Profiler não está ativada para seu projeto do Google Cloud:

failed to create a profile, will retry: rpc error: code = PermissionDenied
desc = Cloud Profiler API has not been used in project 012345 before or it is disabled.

Para resolver esse problema, seu projeto do Google Cloud precisa ter a API Profiler ativada:

  1. No painel de navegação do console do Google Cloud, selecione APIs e serviços, clique em Ativar APIs e serviços e ative a API Cloud Profiler:

    Acesse as configurações da API Profiler

  2. Se a mensagem API ativada for exibida, quer dizer que a API já está ativada. Caso contrário, clique no botão Ativar.

O autor da chamada não tem permissão

O seguinte erro ocorre quando você não tem permissão para gravar dados de criação de perfil em um projeto do Google Cloud:

failed to create a profile, will retry: rpc error: code = PermissionDenied
desc = The caller does not have permission.

Para resolver o problema, peça ao administrador que conceda permissões adicionais a você nesse projeto. Veja uma lista detalhada das permissões e papéis necessários em Controle de acesso.

Erros com o Node.js

Nesta seção, listamos os problemas que podem ser encontrados ao usar o agente de criação de perfil do Node.js e nossas sugestões sobre como corrigir cada um deles.

O aplicativo não sai normalmente com o Node.js

O agente de criação de perfil para Node.js interfere na saída normal do programa. Pode levar até uma hora para que o programa seja encerrado depois que todas as tarefas forem concluídas.

Para resolver esse problema, emita um sinal SIGINT, por exemplo, usando Ctrl-C. Quando você emite um sinal SIGINT, o processo é encerrado normalmente.

Erros com Python

Nesta seção, listamos os problemas que podem ser encontrados ao usar o agente de criação de perfil do Python e nossas sugestões sobre como corrigir cada um deles.

Exceção NotImplementedError com Python

A exceção a seguir é gerada durante a execução da função start quando o aplicativo é executado em um ambiente que não é Linux:

NotImplementedError

Para resolver esse problema, execute seu aplicativo em um ambiente Linux.

Exceção ValueError com Python

A exceção a seguir é gerada durante start quando os argumentos da função são inválidos, quando não é possível determinar as informações necessárias nas variáveis e argumentos do ambiente ou quando a caracterização de perfil do tempo de CPU e do tempo decorrido estão desativadas:

ValueError

Para resolver esse problema, verifique todos os itens a seguir:

  • Garanta que o nome e a versão do serviço atendam aos requisitos definidos em Argumentos de versão e nome de serviço.
  • Se a criação de perfil de tempo decorrido estiver ativada, start deverá ser chamada a partir da linha de execução principal.
  • Verifique se você usa uma versão compatível do Python, e se a criação de perfil dos tipos "Tempo de CPU" e "tempo decorrido" está ativada. Para saber mais, veja a start função.
  • Verifique se você especificou o parâmetro project_id para start se estiver executando fora do Google Cloud. Para saber mais, veja a start função.

Erros de recurso temporariamente indisponíveis com o Python

O registro de erros contém as seguintes entradas após a ativação do Profiler:

BlockingIOError: [Errno 11] Resource temporarily unavailable
Exception ignored when trying to write to the signal wakeup fd

Essas mensagens ocorrem quando um aplicativo é registrado com o descritor do arquivo de ativação do sinal, signal.set_wakeup_fd. Por padrão, se o buffer do descritor do arquivo for preenchido, um aviso será registrado no stderr.

Quando o Cloud Profiler coleta perfis, ele aciona sinais com alta frequência e pode fazer com que o descritor de arquivo de sinais seja preenchido. Para o problema do GitHub, consulte BlockingIOError no App Engine.

Para resolver esse problema, faça uma das seguintes ações:

  • Se seu aplicativo puder ser executado com segurança quando os sinais forem perdidos, use o Cloud Profiler. Se você estiver usando o Python 3.7 ou posterior e quiser desativar as mensagens de aviso, transmita warn_on_full_buffer=False como um parâmetro para signal.set_wakeup_fd.

  • Se seu aplicativo não puder ser executado com segurança quando os sinais forem perdidos, recomendamos que você pare de usar o Cloud Profiler. O uso contínuo pode causar a perda de números de sinal e excesso de entradas no registro de erros.

Todos os perfis ausentes

Há dois motivos comuns para os perfis não serem exibidos:

  • O serviço não está funcionando por tempo suficiente para a coleta de perfis.
  • O serviço não está configurado para autenticação.

Para resolver problemas relacionados a um curto tempo de execução, verifique se o serviço é executado continuamente por pelo menos três minutos.

Para resolver problemas relacionados à autenticação, verifique se o agente de caracterização de perfil pode gravar dados no seu projeto do Google Cloud:

  • Se o serviço estiver em execução no Google Cloud, a autenticação será automática, exceto quando você implantar um contêiner no Compute Engine. Ao implantar um contêiner no Compute Engine, é preciso especificar o ID do projeto do Google Cloud no comando start do agente do Profiler. Veja instruções em Como vincular o agente a um projeto do Google Cloud.

  • Se o serviço estiver em execução fora do Google Cloud, crie uma conta de serviço e vincule o agente do Profiler ao seu projeto do Google Cloud. Saiba mais em Como criar perfis fora do Google Cloud.

Perfis ausentes de um tipo específico

Esta seção lista configurações específicas em que os perfis de um ou mais tipos de perfil não são coletados. A primeira seção apresenta conteúdo geral e as seções restantes listam problemas para idiomas específicos.

Informações gerais

Se você quiser ver um tipo de perfil específico, mas nenhum perfil desse tipo estiver disponível, verifique o seguinte:

As seções restantes desta página descrevem configurações específicas de idioma em que os dados de um tipo de perfil não são coletados.

Go: os perfis de tempo de CPU não são coletados para c-archives

Quando um aplicativo Go é criado com a sinalização -buildmode definida como c-archive ou c-shared, a caracterização de perfil de tempo de CPU é desativada por padrão. Perfis de heap, de contenção e de linha de execução são coletados. Para mais informações, consulte o problema n.° 993 do GitHub: o criador de perfil não está coletando dados de CPU para o código Go em um c-archive.

Para resolver esse problema, ative a coleta de perfis de tempo de CPU antes que seu serviço chame profiler.Start e adicione uma chamada a signal.Notify(make(chan os.Signal), syscall.SIGPROF). Para mais informações sobre signal.Notify, consulte func Notify.

Java: os perfis de heap não são coletados quando vários perfis são ativados

Você ativou vários criadores de perfil de heap para um aplicativo Java e não tem perfis.

O exemplo de heap Java é ativado como um recurso de agente autônomo. O efeito é que somente um criador de perfil pode estar em uso por vez. Um bug foi aberto para estender o Java para oferecer compatibilidade com vários criadores de perfil de alocação heap. Para informações sobre esse bug, consulte Adicionar compatibilidade com vários agentes para o mecanismo de amostragem de heap.

Para resolver esse problema, ative um criador de perfil.

Python: sem tempo de CPU e sem perfis Wall ao usar o uWSGI

Quando o uWSGI usa vários workers para processar solicitações, o comportamento padrão é executar a inicialização do aplicativo apenas no processo (master) mestre. Os processos bifurcados não executam a sequência de inicialização.

Se você configurar o agente de caracterização de perfil na sequência de inicialização do seu aplicativo, por exemplo, configure o agente de caracterização de perfil no método AppConfig.ready() de um aplicativo Django, o agente de caracterização de perfil não será configurado para os processos bifurcados.

Para resolver esse problema, execute a inicialização do aplicativo em todos os processos do worker definindo a sinalização lazy-apps como true.

Python: ter perfis de tempo de CPU, mas não perfis Wall ao usar uWSGI.

O criador de perfil do tempo decorrido depende do módulo de sinal do Python. Quando o interpretador de Python é compilado com suporte à linha de execução, a configuração padrão desativa o processamento de sinal personalizado para processos bifurcados.

Para resolver esse problema, em aplicativos uWSGI, ative o gerenciamento do sinal personalizado, definindo a sinalização py-call-osafterfork como true.

Python: nenhum perfil para processos bifurcados

Os agentes de criação de perfil só podem criar o perfil do processo que iniciou o agente.

Para resolver esse problema, se o aplicativo bifurcar processos e você quiser coletar perfis dos processos bifurcados, inicialize o agente após a bifurcação.