Solucionar problemas das funções de Serviços de Nuvem do Azure (suporte estendido) que não são iniciadas
Este artigo discute como solucionar problemas de falhas de inicialização em instâncias de função dos Serviços de Nuvem do Azure (suporte estendido).
Lista de verificação de solução de problemas
Escolha entre as opções a seguir para diagnosticar problemas que ocorrem em instâncias de função.
Opção 1: desativar erros personalizados
Para exibir informações de erro completas, abra o arquivo Web.config da função Web, defina o modo de erro personalizado como Off
e reimplante o serviço:
No Visual Studio, abra a solução.
No Gerenciador de Soluções, abra o arquivo Web.config .
system.web
Na seção, adicione o seguinte código XML:<customErrors mode="Off" />
Salve o arquivo.
Empacote e implante novamente o serviço.
Depois que o serviço for reimplantado, as mensagens de erro que você pode receber sobre o serviço incluirão os nomes de assemblies ou DLLs ausentes.
Opção 2: usar o PowerShell para exibir o status da instância de função
Para obter informações sobre o estado de runtime da instância de função, execute o cmdlet Get-AzCloudServiceRoleInstanceView :
$roleInstanceView = @{
CloudServiceName = "<cloud-service-name>"
ResourceGroupName = "<resource-group-name>"
RoleInstanceName = "WebRole1_IN_0"
}
Get-AzCloudServiceRoleInstanceView @roleInstanceView
O estado da instância de função é listado na primeira coluna, conforme mostrado na saída de exemplo a seguir:
Statuses PlatformFaultDomain PlatformUpdateDomain
-------- ------------------- --------------------
{RoleStateStarting} 0 0
Opção 3: usar o portal do Azure para exibir o status da instância de função
Para exibir informações de status sobre uma instância de função no portal do Azure, siga estas etapas:
No portal do Azure, pesquise e selecione Serviços de nuvem (suporte estendido).
Na lista de serviços de nuvem, selecione o nome do seu serviço de nuvem.
No painel de menus, procure em Configurações e selecione Funções e Instâncias.
Selecione o nome da instância de função.
No painel de instância de função, observe o estado da instância de função no campo Status .
Opção 4: usar a Área de Trabalho Remota para exibir informações de erro
Para acessar a função e exibir informações completas de erro, use o RDP (Remote Desktop Protocol) seguindo estas etapas:
Adicionar a extensão de Área de Trabalho Remota aos Serviços de Nuvem do Azure (suporte estendido).
No portal do Azure, quando a instância do serviço de nuvem mostrar um status Pronto, use a Área de Trabalho Remota para entrar no serviço de nuvem. Para obter mais informações, confira Conectar-se a instâncias de função usando a Área de Trabalho Remota.
Entre na VM (máquina virtual) usando as credenciais usadas para configurar a Área de Trabalho Remota.
Abra uma janela do prompt de comando.
Execute o comando ipconfig . Copie o valor retornado para o endereço IPv4.
Abra um navegador da Web.
Na barra de endereços, cole o endereço IPv4 e acrescente uma barra e o nome do arquivo padrão do aplicativo Web. Por exemplo,
http://<ipv4-address>/default.aspx
.
Se você acessar o site agora, verá mensagens de erro contendo mais informações. Veja um exemplo:
Erro de servidor no aplicativo '/'.
Não foi possível carregar o arquivo ou assembly 'Microsoft.WindowsAzure.StorageClient, Version=1.1.0.0, Culture=neutral, PublicKeyToken=<16-digit-hexadecimal-string>' ou uma de suas dependências. O sistema não pode encontrar o arquivo especificado.
Descrição: ocorreu uma exceção sem tratamento durante a execução da solicitação da Web atual. Examine o rastreamento de pilha para obter mais informações sobre o erro e em que ponto ele ocorreu no código.
Detalhes da exceção: System.IO.FileNotFoundException
Opção 5: usar o emulador de computação
Você pode usar o Emulador de Computação do Azure para diagnosticar e solucionar problemas de dependências ausentes e erros Web.config . Para obter melhores resultados ao usar esse método para diagnosticar problemas, use um computador ou VM que tenha uma instalação limpa do Windows.
Para diagnosticar problemas usando o Emulador de Computação do Azure:
Instale o SDK do Azure.
No computador de desenvolvimento, compile o projeto do serviço de nuvem.
No Explorador de Arquivos, no projeto de serviço de nuvem, vá para a pasta bin\debug.
Copie a pasta .csx e o arquivo .cscfg para o computador que você está usando para depurar problemas.
No computador limpo, abra uma janela do Prompt de Comando do SDK do Azure.
No prompt de comando, execute o seguinte
csrun
comando:csrun.exe /devstore:start
Execute o comando a seguir:
run csrun <path-to-.csx-folder> <path-to-.cscfg-file> /launchBrowser
Quando a função é iniciada, o navegador da Web exibe informações detalhadas sobre o erro.
Se for necessário realizar um diagnóstico mais amplo, use as ferramentas de solução de problemas padrão do Windows.
Opção 6: usar o IntelliTrace
Observação
Você não pode usar o IntelliTrace no Visual Studio 2022. O IntelliTrace ainda estará disponível se você estiver usando o Visual Studio 2019, 2017 ou 2015.
Para funções de trabalho e Web que usam .NET Framework 4, você pode usar o IntelliTrace. O IntelliTrace está disponível no Visual Studio Enterprise.
Para implantar seu serviço de nuvem enquanto o IntelliTrace está ativado:
Verifique se o SDK do Azure 1.3 ou uma versão posterior está instalada.
No Visual Studio, implante a solução. Ao configurar a implantação, marque a caixa de seleção Habilitar o IntelliTrace para funções do .NET 4.
Depois que a instância de função for iniciada, abra o Gerenciador de Servidores.
Expanda o nó Azure\Serviços de Nuvem.
Para listar as instâncias de função, expanda a implantação. Em seguida, clique com o botão direito do mouse em uma instância de função.
Selecione Exibir logs do IntelliTrace.
No Resumo do IntelliTrace, vá para Dados de Exceção e expanda esse nó.
Na lista de exceções, procure uma linha que contenha um valor de coluna Type de System.IO.FileNotFoundException. O valor da coluna Mensagem correspondente deve ser semelhante ao seguinte texto:
Não foi possível carregar o arquivo ou assembly 'Microsoft.WindowsAzure.StorageClient, Version=1.1.0.0, Culture=neutral, PublicKeyToken=<16-digit-hexadecimal-string>' ou uma de suas dependências. O sistema não pode encontrar o arquivo especificado.
Causa 1: falha na operação do serviço de nuvem devido a RoleInstanceStartupTimeoutError
Uma ou mais instâncias de função nos Serviços de Nuvem do Azure (suporte estendido) podem demorar para iniciar. Ou sua instância de função pode estar reciclando ou presa em um estado ocupado e não iniciar conforme o esperado. Nessa situação, a mensagem de erro do aplicativo de RoleInstanceStartupTimeoutError
função é exibida.
O aplicativo de função contém duas partes que podem causar reciclagem de função:
- Tarefas de inicialização
- Código de função (Implementação de RoleEntryPoint)
Se a função for interrompida, o agente de PaaS (plataforma como serviço) reiniciará a função.
Para determinar se o problema é causado por uma tarefa de inicialização, siga estas etapas:
Tente usar a Área de Trabalho Remota para se conectar à instância de função problemática.
Depois de se conectar à instância de função, selecione Iniciar e, em seguida, pesquise e selecione Gerenciador de Tarefas.
Para ver uma lista de processos, selecione a guia Detalhes no Gerenciador de Tarefas.
Verifique se há processos para WaIISHost.exe (para um WebRole) ou WaWorkerHost.exe (para um WorkerRole). Se esses dois processos estiverem ausentes, uma tarefa de inicialização provavelmente falhará.
Você conseguiu verificar se o problema foi causado por uma tarefa de inicialização? Nesse caso, você pode aplicar a solução a seguir. No entanto, a solução estará disponível somente se a tarefa de inicialização for uma tarefa simples ou em primeiro plano. A solução não se aplica a tarefas de inicialização em segundo plano. As tarefas são executadas de forma assíncrona, em paralelo com a inicialização da função.
Solução: depurar o script da tarefa de inicialização
Para solucionar problemas de uma falha na tarefa de inicialização, depure o script executado durante a inicialização da VM. Esse script de tarefa de inicialização é o arquivo Startup.cmd . Para ajudar a investigar os problemas no script, você pode escolher entre as seguintes opções:
Exiba o arquivo de log C:\Resources\WaHostBootstrapper.log. Esse arquivo é o log do processo WaHostBootstrapper.exe . Esse processo é responsável pelas tarefas de inicialização. Ele é descrito no fluxo de trabalho da arquitetura de VM clássica do Windows Azure. Em seguida, procure qualquer erro ou exceção que envolva a execução Startup.cmd. Verifique especialmente se o código de saída é 0. Se não for, a tarefa de inicialização foi concluída, mas tem erros. Se não houver logs relacionados ao código de saída do script, a tarefa de inicialização ainda estará em execução.
Se o script da tarefa de inicialização não puder ser executado livremente no ambiente de produção devido ao impacto comercial esperado, personalize o mecanismo de registro em log na linha de comando. Por exemplo, você pode redirecionar a saída de informações de chave em um comando de script para um arquivo. Uma maneira de fazer isso é anexar
> "%TEMP%\StartupLog.txt"
ao final do comando.Na linha de comando, execute manualmente o script de tarefa de inicialização. Os locais desse script para as funções WebRole ou WorkerRole são mostrados na tabela a seguir.
Função Local do script WebRole E:\approot\bin\Startup.cmd WorkerRole E: \ approot \ Startup.cmd
Causa 2: DLLs ou assemblies estão ausentes
Instâncias de função que não respondem e instâncias de função que alternam entre estados podem ser causadas por DLLs ou assemblies ausentes.
Estes são alguns sintomas de DLLs ou assemblies ausentes:
Sua instância de função percorre os estados Initializing, Busy e Stoping .
Sua instância de função foi movida para o estado Pronto , mas a página não está visível em seu aplicativo Web.
Se um site for implantado em uma função Web e não tiver uma DLL, ele poderá exibir a seguinte mensagem de erro de tempo de execução do servidor.
Erro de servidor no aplicativo '/'.
Erro de tempo de execução
Descrição: ocorreu um erro de aplicativo no servidor. As configurações de erro personalizadas atuais para este aplicativo impedem que os detalhes do erro do aplicativo sejam visualizados remotamente (por motivos de segurança). Ele poderia, no entanto, ser visto por navegadores em execução na máquina do servidor local.
Detalhes: Para permitir que os detalhes dessa mensagem de erro específica possam ser visualizados na máquina remota, crie uma
<customErrors>
marca com um arquivo de configuração "web.config" localizado no diretório raiz do aplicativo Web atual. Essa<customErrors>
tag deve ter seu atributo "mode
" definido como "Off
".
Solução: resolver DLLs e assemblies ausentes
Para resolver erros de DLLs e assemblies ausentes:
No Visual Studio, abra a solução.
No Gerenciador de Soluções, abra a pasta Referências.
Selecione o assembly identificado na mensagem de erro.
Em Propriedades, defina a propriedade Local da Cópia como True.
Reimplante o serviço de nuvem.
Depois de verificar se os erros não aparecem mais, implemente novamente o serviço. Ao configurar a implantação, não marque a caixa de seleção Habilitar IntelliTrace para funções do .NET 4.
Próximas etapas
- Saiba como solucionar problemas de função de serviço de nuvem usando dados de diagnóstico de computador PaaS do Azure.
Mais informações
Para obter informações sobre a configuração inicial, a execução e exemplos de tarefas de inicialização no Serviço de Nuvem clássico, consulte os seguintes artigos:
- Como configurar e executar tarefas de inicialização para um Serviço de Nuvem do Azure (clássico)
- Tarefas de inicialização do Common Cloud Service (clássico)
Entre em contato conosco para obter ajuda
Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.