Compartilhar via


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 Offe reimplante o serviço:

  1. No Visual Studio, abra a solução.

  2. No Gerenciador de Soluções, abra o arquivo Web.config .

  3. system.web Na seção, adicione o seguinte código XML:

    <customErrors mode="Off" />
    
  4. Salve o arquivo.

  5. 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:

  1. No portal do Azure, pesquise e selecione Serviços de nuvem (suporte estendido).

  2. Na lista de serviços de nuvem, selecione o nome do seu serviço de nuvem.

  3. No painel de menus, procure em Configurações e selecione Funções e Instâncias.

  4. Selecione o nome da instância de função.

  5. 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:

  1. Adicionar a extensão de Área de Trabalho Remota aos Serviços de Nuvem do Azure (suporte estendido).

  2. 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.

  3. Entre na VM (máquina virtual) usando as credenciais usadas para configurar a Área de Trabalho Remota.

  4. Abra uma janela do prompt de comando.

  5. Execute o comando ipconfig . Copie o valor retornado para o endereço IPv4.

  6. Abra um navegador da Web.

  7. 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:

  1. Instale o SDK do Azure.

  2. No computador de desenvolvimento, compile o projeto do serviço de nuvem.

  3. No Explorador de Arquivos, no projeto de serviço de nuvem, vá para a pasta bin\debug.

  4. Copie a pasta .csx e o arquivo .cscfg para o computador que você está usando para depurar problemas.

  5. No computador limpo, abra uma janela do Prompt de Comando do SDK do Azure.

  6. No prompt de comando, execute o seguinte csrun comando:

    csrun.exe /devstore:start
    
  7. 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:

  1. Verifique se o SDK do Azure 1.3 ou uma versão posterior está instalada.

  2. 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.

  3. Depois que a instância de função for iniciada, abra o Gerenciador de Servidores.

  4. Expanda o nó Azure\Serviços de Nuvem.

  5. 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.

  6. Selecione Exibir logs do IntelliTrace.

  7. No Resumo do IntelliTrace, vá para Dados de Exceção e expanda esse nó.

  8. 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:

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:

  1. Tente usar a Área de Trabalho Remota para se conectar à instância de função problemática.

  2. Depois de se conectar à instância de função, selecione Iniciar e, em seguida, pesquise e selecione Gerenciador de Tarefas.

  3. Para ver uma lista de processos, selecione a guia Detalhes no Gerenciador de Tarefas.

  4. 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:

  1. No Visual Studio, abra a solução.

  2. No Gerenciador de Soluções, abra a pasta Referências.

  3. Selecione o assembly identificado na mensagem de erro.

  4. Em Propriedades, defina a propriedade Local da Cópia como True.

  5. 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

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:

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.