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:
-
Enable the required API.
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
parastart
se estiver executando fora do Google Cloud. Para saber mais, veja astart
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 parasignal.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 de aplicativos em execução 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:
Se o tipo de perfil é compatível com o idioma do seu aplicativo. Saiba mais em Tipos de criação de perfil disponíveis.
Verifique se você usou uma nova versão de serviço depois de alterar quais tipos de perfil são coletados. Se você não especificar uma nova versão de serviço, uma implantação atual será usada e o agente de caracterização de perfil não poderá transferir os dados para o tipo de perfil recém-ativado. Saiba mais sobre implantações em Coleta de perfis.
Se o tipo de perfil está ativado. Alguns tipos de perfil ficam desativados por padrão. Para mais informações, consulte as páginas individuais de idiomas:
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.