Compartilhar via


Solucionar problemas de alta CPU em máquinas virtuais do Windows do Azure

Aplica-se a: ✔️ Windows VMs

Resumo

Problemas de desempenho ocorrem em diferentes sistemas operacionais ou aplicativos, e cada problema requer uma abordagem exclusiva para solucionar problemas. A maioria desses problemas gira em torno de CPU, memória, rede e entrada/saída (E/S) como locais-chave onde o problema ocorre. Cada uma dessas áreas gera sintomas diferentes (às vezes simultaneamente) e requer um diagnóstico e solução diferentes.

Este artigo discute problemas de alto uso da CPU que ocorrem em VMs (Máquinas Virtuais) do Azure que executam o sistema operacional Windows.

Problemas de alta CPU em VMs do Windows do Azure

Além dos problemas de E/S e latência de rede, a solução de problemas de CPU e memória requer as mesmas ferramentas e etapas que os servidores locais. Uma das ferramentas que a Microsoft normalmente oferece suporte é o PerfInsights (disponível para Windows e Linux). O PerfInsights pode fornecer um diagnóstico de práticas recomendadas da VM do Azure em um relatório amigável. O PerfInsights também é uma ferramenta de wrapper que pode ajudar a coletar dados do Perfmon, Xperf e Netmon, dependendo dos sinalizadores selecionados na ferramenta.

A maioria das ferramentas de solução de problemas de desempenho existentes, como Perfmon ou Procmon, usadas para servidores locais funcionará em VMs do Windows do Azure. No entanto, o PerfInsights foi projetado explicitamente para VMs do Azure para fornecer mais insights, incluindo Práticas recomendadas do Azure, Práticas recomendadas de SQL, gráficos de latência de E/S de alta resolução, guias CPU e Memória e assim por diante.

Se ele é executado como Modo de Usuário ou Modo Kernel, qualquer thread de um processo ativo requer ciclos de CPU para executar o código do qual ele foi criado. Muitos problemas estão diretamente relacionados à carga de trabalho. O tipo de carga de trabalho que existe no servidor impulsiona o consumo de recursos, incluindo CPU.

Fatores comuns

Os seguintes fatores são comuns em uma situação de alta CPU:

  • Uma alteração ou implantação de código recente que é aplicável principalmente a aplicativos como Serviços de Informações da Internet (IIS), Microsoft SharePoint, Microsoft SQL Server ou aplicativos de terceiros.

  • Uma atualização recente que pode estar relacionada a uma atualização no nível do sistema operacional ou a atualizações e correções cumulativas no nível do aplicativo.

  • Uma alteração de consulta ou índices desatualizados. Os aplicativos da camada de dados do SQL Server e do Oracle também têm uma otimização do plano de consulta como outro fator. Alterações de dados ou falta de índices apropriados podem fazer com que várias consultas se tornem mais intensivas em computação.

  • Específico da VM do Azure. Há determinados processos, como RDAgent, e processos específicos de extensão, como Agente de Monitoramento, agente MMA ou cliente de segurança, que podem causar alto consumo de CPU. Esses processos devem ser visualizados de uma perspectiva de configuração ou de problemas conhecidos.

Solucionar o problema

Este artigo se concentra em isolar o processo problemático. Uma análise mais aprofundada será específica para o processo que está impulsionando o alto consumo de CPU.

Por exemplo, se o processo for SQL Server (sqlservr.exe), as próximas etapas serão analisar qual consulta estava usando mais ciclos de CPU em um período de tempo específico.

Escopo do problema

Aqui estão algumas perguntas a serem feitas ao solucionar o problema:

  • Existe um padrão para o problema? Por exemplo, o problema de alta CPU ocorre em um determinado horário todos os dias, semanas ou meses? Em caso afirmativo, você pode correlacionar esse problema a um trabalho, relatório ou login de usuário?

  • O problema de alta CPU começou após uma alteração recente de código? Você aplicou uma atualização no Windows ou em um aplicativo?

  • O problema de alta CPU começou após uma alteração na carga de trabalho, como um aumento no número de usuários, um maior fluxo de dados ou um número maior de relatórios?

  • Para o Azure, o problema de alta CPU começou em qualquer uma das seguintes condições?

    • Após uma reimplantação ou reinicialização recente
    • Quando um SKU ou tipo de VM foi alterado
    • Quando uma nova extensão foi adicionada
    • Depois que as alterações do balanceador de carga foram feitas

Advertências do Azure

Entenda sua carga de trabalho. Ao selecionar uma VM, você pode subestimar as contagens de CPU virtual (vCPU) ao examinar o custo geral mensal de hospedagem. Se sua carga de trabalho for intensiva em computação, selecionar um SKU de VM menor que tenha uma ou duas vCPUs poderá causar problemas de carga de trabalho. Teste diferentes configurações para sua carga de trabalho para determinar a melhor capacidade de computação necessária.

Há determinadas séries de VMs, como a Série B (Modo de Intermitência), que são recomendadas para garantia de qualidade (QA) e testes. O uso dessas séries no ambiente de produção limita a capacidade de computação após o esgotamento dos créditos da CPU.

Para aplicativos conhecidos, como SQL Server, Oracle, RDS (Serviços de Área de Trabalho Remota), Área de Trabalho Virtual do Azure, IIS ou SharePoint, há artigos de Práticas Recomendadas do Azure que incluem recomendações para configuração mínima para essas cargas de trabalho.

Problemas contínuos de alta CPU

Se o problema estiver ocorrendo agora, essa é a melhor oportunidade para capturar o rastreamento do processo para determinar o que está causando o problema. Você pode usar as ferramentas existentes que está usando para servidores Windows locais para localizar o processo. As ferramentas a seguir são recomendadas pelo Suporte do Azure para VMs do Azure.

PerfInsights

O PerfInsights é a ferramenta recomendada do suporte do Azure para problemas de desempenho de VM. Ele foi projetado para cobrir as práticas recomendadas e guias de análise dedicadas para gráficos de CPU, memória e E/S de alta resolução. Você pode executá-lo sob demanda por meio do portal do Azure ou de dentro da VM. Você pode compartilhar os dados com a equipe de suporte do Azure.

Executar o PerfInsights

O PerfInsights está disponível para os sistemas operacionais Windows e Linux . Para Windows, aqui estão as opções.

Executar e analisar relatórios por meio do portal do Azure

Quando ele é instalado por meio do portal do Azure, na verdade, instala uma extensão na VM. Os usuários também podem instalar o PerfInsights como uma extensão acessando diretamente a folha Extensões na VM e escolhendo uma opção de diagnóstico de desempenho.

Portal do Azure Opção 1

Navegue pela folha da VM e selecione a opção Diagnóstico de desempenho. Você será solicitado a instalar a opção (usa extensões) na VM para a qual você a selecionou.

Captura de tela do botão Instalar diagnóstico de desempenho na opção Diagnóstico de desempenho.

Opção 2 do portal do Azure

Navegue até Diagnosticar e Resolver Problemas na folha da VM e procure Problemas de Desempenho da VM.

Captura de tela dos problemas de desempenho da VM na opção Diagnosticar e resolver o problema.

Se você selecionar Solução de problemas, a tela de instalação do PerfInsights será carregada.

Se você selecionar Instalar, a instalação fornecerá diferentes opções de coleta.

Captura de tela das configurações de análise de desempenho na opção Diagnóstico de desempenho.

As opções numeradas na captura de tela estão relacionadas aos seguintes comentários:

  1. Para a opção de Alta CPU, selecione Análise de Desempenho ou Avançado.

  2. Quando você adicionar sintomas aqui, eles serão adicionados ao relatório, o que ajuda você a compartilhar informações com o Suporte do Azure.

  3. Selecione a duração da coleta de dados. Para a opção Alta CPU, selecione pelo menos 15 minutos ou mais. No modo de portal do Azure, você pode coletar até 15 minutos de dados. Para períodos mais longos de coleta, você deve executar o programa como um executável na VM.

  4. Se você for solicitado pelo Suporte do Azure a coletar esses dados, poderá adicionar o número do tíquete aqui. Esse campo é opcional.

  5. Selecione este campo para aceitar o Contrato de Licença de Usuário Final (EULA).

  6. Selecione esse campo se você pretende disponibilizar esse relatório para a equipe de Suporte do Azure que está ajudando nesse caso.

O relatório é armazenado em uma das Contas de Armazenamento em sua assinatura. Ele está disponível para visualização e download posterior.

Executar o PerfInsights de dentro da VM

Esse método pode ser usado se você pretende executar o PerfInsights por períodos mais longos. O artigo PerfInsights fornece um passo a passo detalhado dos diferentes comandos e sinalizadores necessários para executar o PerfInsights como um executável. Para fins de alto uso da CPU, você precisará de um dos seguintes modos:

  • Cenário avançado

    • PerfInsights /run advanced xp /d 300 /AcceptDisclaimerAndShareDiagnostics
  • Cenário de VM lenta (desempenho)

    • PerfInsights /run vmslow /d 300 /AcceptDisclaimerAndShareDiagnostics /sa <StorageAccountName> /sk <StorageAccountKey>

A saída do comando estará na mesma pasta em que você salvou o executável do PerfInsights.

O que procurar no relatório

Depois de executar o relatório, o local do conteúdo depende se ele foi executado por meio do portal do Azure ou como um executável. Para qualquer uma das opções, acesse a pasta de log gerada ou baixe (se for o portal do Azure) localmente para análise.

Executar pelo portal do Azure

Captura de tela de um diagnóstico de desempenho de alto impacto.

Captura de tela do botão Baixar relatório na página Relatório de diagnóstico de desempenho.

Executar a partir da VM

Sua estrutura de pastas deve ser semelhante às seguintes imagens:

Captura de tela da pasta de saída e do arquivo HTML do relatório do PerfInsight na estrutura de pastas.

Captura de tela do GeneralCounters_000001.blg e System.evtx em sua estrutura de pastas.

  1. Todas as coleções adicionais, como Perfmon, Xperf, Netmon, logs SMB, logs de eventos e assim por diante, podem ser encontradas na pasta Output.

  2. O relatório real, juntamente com análises e recomendações.

  3. Para Desempenho (VMslow) e Avançado, o relatório coleta informações de desempenho durante a execução do PerfInsights.

  4. Os logs de eventos mostram uma exibição rápida de detalhes úteis de falhas no nível do sistema ou do processo.

Onde começar

Abra o relatório PerfInsights. A guia Descobertas registra quaisquer exceções em termos de consumo de recursos. Se houver instâncias de alto uso da CPU, a guia Descobertas irá categorizá-lo como Alto Impacto ou Médio Impacto.

Captura de tela da guia Descobertas na parte CPU da página Relatório do PerfInsights. Neste exemplo, o nível de impacto é Médio.

Semelhante ao exemplo anterior, o PerfInsights foi executado por 30 minutos. Durante metade desse tempo, o processo destacado estava esgotando a CPU no lado superior. Se o mesmo processo estivesse em execução durante todo o tempo de coleta, o nível de impacto teria mudado para HIGH.

Se você expandir o evento Descobertas , verá vários detalhes importantes. A guia lista os processos em ordem decrescente, por consumo médio de CPU , e mostra se o processo estava relacionado ao sistema, a um aplicativo de propriedade da Microsoft (SQL, IIS) ou a um processo de terceiros.

Mais detalhes

Há uma subguia dedicada em CPU que pode ser usada para análise detalhada de padrões, por núcleo ou por processo.

A guia Principais consumidores de CPU tem duas seções separadas de interesse, e você pode exibir estatísticas por processador aqui. O design do aplicativo é frequentemente Single-Threaded ou se fixa em um único processador. Nesse cenário, um ou alguns núcleos são executados a 100%, enquanto outros núcleos são executados nos níveis esperados. Esses cenários são mais complexos porque a CPU média no servidor parece ser executada conforme o esperado, mas os processos fixados em núcleos com alto uso serão mais lentos do que o esperado.

Captura de tela da guia Principais Consumidores de CPU na parte CPU da página Relatório do PerfInsights, que mostra o Período de Análise de Diagnóstico de Desempenho e os Períodos de Alto Uso da CPU.

A segunda seção (igualmente importante) é Top Long Running CPU Consumers. Esta seção mostra os detalhes do processo e seu padrão de uso da CPU. A lista é classificada por ter consumidores médios de CPU altos no topo.

Captura de tela da seção Principais consumidores de CPU de longa duração.

Essas duas guias serão suficientes para definir o caminho para as próximas etapas de solução de problemas. Dependendo do processo que está conduzindo a condição de alta CPU, você terá que responder às perguntas feitas anteriormente. Processos como SQL Server (sqlservr.exe) ou IIS (w3wp.exe) exigem uma busca detalhada específica em alterações de consulta ou código que estão causando essa condição. Para processos do sistema, como WMI ou Lsass.exe, você precisa seguir um caminho diferente.

Para processos relacionados à VM do Azure, como RDAgent, OMS e executáveis de extensão de monitoramento, talvez seja necessário corrigir um novo build ou versão obtendo ajuda da equipe de Suporte do Azure.

Perfmon

O Perfmon é uma das primeiras ferramentas para solucionar um problema de recurso no Windows Server. Não fornece um relatório claro com recomendações ou descobertas. Em vez disso, exige que o usuário explore os dados coletados e use um filtro específico nas diferentes categorias de contador.

O PerfInsights coleta o Perfmon como um log extra para VMSlow e cenários avançados. No entanto, o Perfmon pode ser coletado de forma independente e tem estes benefícios adicionais:

  • Pode ser coletado remotamente.

  • Ele pode ser agendado por meio de Tarefas.

  • Ele pode ser coletado por períodos mais longos ou em modo contínuo usando o recurso de rolagem.

Considere o mesmo exemplo mostrado no PerfInsights para ver como o Perfmon mostra esses dados. As categorias de contador necessárias são as seguintes:

  • Informações do > processador %Tempo > do processador _Total

  • Processar > %ProcessorTime > Todas as Instâncias

Onde começar

Os nomes dos arquivos de saída do Perfmon têm uma .blg extensão. Você pode coletar esses arquivos de forma independente ou usando o PerfInsights. Para esta discussão, você usará o Perfmon .blg incluído nos dados do PerfInsights e que foi coletado de acordo com o exemplo anterior.

Não há relatórios padrão prontos para o usuário disponíveis no Perfmon. Existem diferentes exibições que alteram o tipo de gráfico, mas a filtragem do processo (ou o trabalho necessário para identificar os processos culpados) é manual.

Observação

A ferramenta PAL pode consumir .blg arquivos e gerar relatórios detalhados.

Para começar, selecione a categoria Adicionar Contadores .

  1. Em Contadores disponíveis, selecione o contador %ProcessorTime na Categoria de Informações do Processador.

  2. Selecione _Total, que fornece as estatísticas de todos os núcleos combinados.

  3. Selecione Adicionar. A janela mostra %ProcessorTime em Contadores adicionados.

Captura de tela da caixa de diálogo Adicionar Contadores no Monitor de Desempenho.

Depois que os contadores forem carregados, você verá gráficos de tendência de linha no período de coleta. Você pode selecionar ou desmarcar os contadores. Até agora, você adicionou apenas um contador.

Captura de tela dos gráficos de tendência de linha no período de coleta.

Cada contador terá valores Médio, Mínimo e Máximo . Concentre-se nos valores Média e Máximo , pois o valor médio pode variar dependendo da duração da coleta de dados. Se a alta atividade da CPU foi vista por 10 minutos enquanto a coleta geral foi de 40 minutos, os valores médios serão muito menores.

O gráfico de tendência anterior mostra que o Processador Total estava variando perto de 80% por aproximadamente 15 minutos.

Identifique o processo

Identificamos que o servidor teve alto consumo de CPU por um período de tempo especificado, mas ainda não identificamos o driver. Ao contrário do uso do PerfInsights, você deve pesquisar manualmente o processo culpado nesse caso.

Para esta tarefa, você deve limpar ou remover os contadores %ProcessorTime adicionados anteriormente e, em seguida, adicionar uma nova categoria:

  • Processar > %ProcessorTime > Todas as Instâncias

Essa categoria carregará contadores para todos os processos em execução naquele momento.

Captura de tela das etapas para adicionar a nova categoria.

Em um computador de produção típico, centenas de processos podem estar em execução. Portanto, pode demorar um pouco para limpar todos os contadores que parecem ter um gráfico de tendência baixa ou plana.

Para acelerar esse processo, use a visualização Histograma e altere o tipo de visualização de Linha para Histograma, o que lhe dará um gráfico de barras. Você descobrirá que é mais fácil escolher os processos que experimentam alto uso da CPU durante o tempo de coleta.

Como sempre haverá uma barra para o Total, concentre-se nas barras que estão apresentando uma alta taxa de exaustão. Você pode excluir as outras barras para limpar a exibição. Agora, volte para a visualização de linha .

Captura de tela do botão de exibição de histograma no Monitor de Desempenho e um gráfico de exemplo que contém 2 barras mostrando uma alta taxa de esgotamento.

Agora é mais fácil pegar o processo culpado. Por padrão, os valores Max e Min são múltiplos do número de núcleos no servidor ou threads do processo.

Captura de tela de um gráfico de tendência de linha mostrando claramente o processo culpado.

A lista de ferramentas disponíveis não termina no PerfInsights para Perfmon. Você tem acesso a outras ferramentas, como ProcessMonitor (ProcMon) ou Xperf. Existem muitas ferramentas de terceiros disponíveis para uso conforme necessário.

Ferramentas de monitoramento do Azure

As VMs do Azure têm métricas confiáveis que incluem informações básicas, como CPU, E/S de rede e bytes de E/S. Para métricas avançadas, como o Azure Monitor, você precisará fazer apenas algumas seleções para configurar e usar uma conta de armazenamento especificada.

Contadores básicos (padrão)

Captura de tela da página Métricas do Azure Monitor. Neste exemplo, a opção Porcentagem de CPU na configuração Agregação é selecionada.

Habilitando o Azure Monitor

Depois de habilitar as métricas do Azure Monitor, o software instala uma extensão na VM e começa a coletar métricas granulares, que incluem contadores Perfmon.

Captura de tela do campo Conta de armazenamento de diagnóstico na guia Visão geral da página Configurações de diagnóstico.

As categorias de contador Básico são definidas como padrão. No entanto, você também pode definir uma coleção personalizada .

Captura de tela da opção Categorias básicas na guia Contadores de Desempenho da página Configurações de diagnóstico.

Depois que as configurações forem habilitadas, você poderá visualizar esses contadores de convidados na seção Métricas . Você também pode definir alertas (incluindo mensagens de e-mail) se as métricas atingirem um determinado limite.

Captura de tela do campo Namespace de Métrica e do botão Nova regra de alerta na página Métricas.

Para obter mais informações sobre como usar o Azure Monitor para gerenciar VMs do Azure, consulte Monitorando máquinas virtuais do Azure com o Azure Monitor.

Solução de problemas reativa

Se o problema já ocorreu, você deve descobrir o que causou o problema de alta CPU em primeiro lugar. A postura reativa pode ser complicada. O modo de coleta de dados não será tão útil porque o problema já ocorreu.

Se esse problema foi uma ocorrência única, pode ser difícil determinar qual aplicativo o causou. Se a VM do Azure foi configurada para usar o OMS ou outro acompanhamento de diagnóstico, você ainda poderá obter insights sobre o que causou o problema.

Se você estiver lidando com um padrão repetido, colete os dados durante o tempo em que o problema provavelmente ocorrerá em seguida.

O PerfInsights ainda não tem um recurso de execução agendada. No entanto, o Perfmon pode ser executado e agendado por meio da linha de comando.

Comando Logman

O comando Logman Create Counter é usado para executar a coleção Perfmon por meio da linha de comando, para agendá-la por meio do Gerenciador de Tarefas ou para executá-la remotamente.

Exemplo (inclui modo de coleta remota)

Logman create counter LOGNAME -u DOMAIN\USERNAME * -f bincirc -v mmddhhmm -max 300 -c "\\SERVERNAME\LogicalDisk(*)\*" "\\SERVERNAME\Memory\*" "\\SERVERNAME\Network Interface(*)\*" "\\SERVERNAME\Paging File(*)\*" "\\SERVERNAME\PhysicalDisk(*)\*" "\\SERVERNAME\Process(*)\*" "\\SERVERNAME\Redirector\*" "\\SERVERNAME\Server\*" "\\SERVERNAME\System\*" "\\SERVERNAME\Terminal Services\*" "\\SERVERNAME\Processor(*)\*" "\\SERVERNAME\Cache\*" -si 00:01:00

Logman.exe também pode ser iniciado de um computador de VM do Azure par na mesma VNET.

Para saber mais sobre esses parâmetros, consulte logman create counter.

Depois que os dados do Perfmon são coletados enquanto o problema está ocorrendo, as etapas restantes para analisar os dados são as mesmas discutidas anteriormente.

Conclusão

Para qualquer problema de desempenho, entender sua carga de trabalho é fundamental para resolver o problema. As opções em diferentes SKUs de VM e diferentes opções de armazenamento em disco devem ser avaliadas mantendo o foco na carga de trabalho de produção. O processo de teste de soluções em diferentes VMs pode ajudá-lo a tomar a melhor decisão.

Como as operações do usuário e a quantidade de dados variam, sempre mantenha um buffer nos recursos de computação, rede e E/S da VM. Agora, qualquer mudança repentina na carga de trabalho não tem um efeito tão grande.

Se você prevê que a carga de trabalho aumentará em breve, mude para um SKU mais alto que tenha mais poder de computação. Se a carga de trabalho for intensiva em computação, escolha as SKUs de VM com sabedoria.

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.