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. Enable the required API.

    Enable the API

  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:

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.