Solucionar problemas de alta CPU em máquinas virtuais do Azure Windows
Aplica-se a: ✔️ VMs do Windows
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 uma solução diferentes.
Este artigo discute problemas de alto uso de CPU que ocorrem em Máquinas Virtuais (VMs) do Azure que executam o sistema operacional Windows.
Problemas de alta CPU em VMs do Azure Windows
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 de VM do Azure em um relatório amigável. O PerfInsights também é uma ferramenta wrapper que pode ajudar a coletar dados 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ão em VMs do Azure Windows. No entanto, o PerfInsights foi projetado explicitamente para VMs do Azure para fornecer mais informações, incluindo práticas recomendadas do Azure, práticas recomendadas do SQL, gráficos de latência de E/S de alta resolução, guias de CPU e memória e assim por diante.
Quer seja executado como modo de usuário ou modo de kernel, qualquer thread de um processo ativo requer ciclos de CPU para executar o código a partir do qual 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 de camada de dados SQL Server e 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. Existem 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 vistos 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á gerando alto consumo de CPU.
Por exemplo, se o processo for SQL Server (sqlservr.exe), o próximo passo será analisar qual query estava usando mais ciclos de CPU em um determinado período de tempo.
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 no 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 fluxo maior de dados ou um número maior de relatórios?
Para o Azure, o problema de alta CPU começou em alguma das seguintes condições?
- Após uma reimplantação ou reinicialização recente
- Quando um tipo de SKU ou 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 observar o custo mensal geral de hospedagem. Se sua carga de trabalho for de computação intensiva, selecionar um SKU de VM menor que tenha uma ou duas vCPUs pode 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.
Existem certas séries de VM, como a Série B (Disparo Contínuo), 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, existem 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, esta é a melhor oportunidade para capturar o rastreamento do processo para determinar o que está causando o problema. Você pode usar as ferramentas existentes que vem 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
PerfInsights é a ferramenta recomendada do suporte do Azure para problemas de desempenho de VM. Ele foi projetado para abranger as melhores práticas e guias de análise dedicadas para CPU, memória e gráficos de E/S de alta resolução. Você pode executá-lo OnDemand por meio do portal do Azure ou de dentro da VM. Você pode compartilhar os dados com a equipe de suporte do Azure.
Executar 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 é 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 Extensões na folha da VM e, em seguida, escolhendo uma opção de diagnóstico de desempenho.
Portal do Azure Opção 1
Navegue pela lâmina 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 a selecionou.
Opção 2 do portal do Azure
Navegue até Diagnosticar e resolver problemas na folha da VM e procure por Problemas de desempenho da VM.
Se você selecionar Solucionar problemas, a tela de instalação do PerfInsights será carregada.
Se você selecionar Instalar, a instalação fornecerá diferentes opções de coleta.
As opções numeradas na captura de tela referem-se aos seguintes comentários:
Para a opção High-CPU, selecione Análise de desempenho ou Avançado.
Ao adicionar sintomas aqui, eles serão adicionados ao relatório, o que ajuda você a compartilhar informações com o Suporte do Azure.
Selecione a duração da coleta de dados. Para a opção High-CPU, selecione pelo menos 15 minutos ou mais. No modo portal do Azure, você pode coletar até 15 minutos de dados. Para períodos de coleta mais longos, você deve executar o programa como um executável na VM.
Se você for solicitado pelo Suporte do Azure a coletar esses dados, poderá adicionar o número do tíquete aqui. Esse campo é opcional.
Selecione este campo para aceitar o Contrato de licença de usuário final (EULA).
Selecione este campo se você pretende disponibilizar este relatório para a equipe de suporte do Azure que está ajudando neste caso.
O relatório é armazenado em uma das contas de armazenamento em sua assinatura. Está disponível para visualização e download posteriormente.
Execute PerfInsights de dentro da VM
Este método pode ser usado se você pretende executar PerfInsights por períodos mais longos. O artigo PerfInsights fornece uma explicação detalhada 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 onde você salvou o executável do PerfInsights.
O que procurar no relatório
Depois de executar o relatório, a localização 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 portal do Azure) localmente para análise.
Executar pelo portal do Azure
Executar de dentro da VM
Sua estrutura de pastas deve se parecer com as seguintes imagens:
Quaisquer coleções adicionais, como Perfmon, Xperf, Netmon, logs SMB, logs de eventos e assim por diante, podem ser encontradas na pasta Output.
O relatório real, juntamente com análises e recomendações.
Para Desempenho (VMslow) e Avançado, o relatório coleta informações de perfmon durante a execução do PerfInsights.
Os logs de eventos mostram uma visualização rápida de detalhes úteis no nível do sistema ou de travamento do processo.
Onde começar
Abra o relatório PerfInsights. A guia Descobertas registra todos os valores discrepantes 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.
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 ALTO.
Se você expandir o evento Descobertas, verá vários detalhes importantes. A guia lista os processos em ordem decrescente, por consumo de CPU médio e mostra se o processo estava relacionado ao sistema, a um aplicativo 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 ver as estatísticas por processador aqui. O design do aplicativo é frequentemente single-threaded ou se liga a 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 funcionar conforme o esperado, mas os processos fixados em núcleos com alto uso serão mais lentos do que o esperado.
A segunda seção (igualmente importante) é Principais consumidores de CPU de longa duração. Esta seção mostra os detalhes do processo e seu padrão de uso da CPU. A lista é classificada por ter consumidores de CPU médios altos no topo.
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á gerando a condição de alta CPU, você terá que responder às perguntas feitas anteriormente. Processos como SQL Server (sqlservr.exe) ou IIS (w3wp.exe) requerem um detalhamento específico na consulta ou nas alterações de código que estão causando essa condição. Para processos do sistema, como WMI ou Lsass.exe, você deve 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
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 contadores.
PerfInsights coleta Perfmon como um log extra para VMSlow e cenários avançados. No entanto, o Perfmon pode ser coletado independentemente e tem os seguintes benefícios adicionais:
Pode ser coletado remotamente.
Pode ser agendado através 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 > %Processor Time > _Total
Processo > %ProcessorTime > Todas as Instâncias
Onde começar
Os nomes dos arquivos de saída do Perfmon possuem uma extensão .blg
. Você pode coletar esses arquivos independentemente ou usando o PerfInsights. Para esta discussão, você usará o Perfmon .blg
que está incluído nos dados do PerfInsights e que foram coletados de acordo com o exemplo anterior.
Não há relatórios padrão prontos para o usuário disponíveis no Perfmon. Existem diferentes visualizaçõ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 arquivos .blg
e gerar relatórios detalhados.
Para começar, selecione a categoria Adicionar contadores.
Em Contadores disponíveis, selecione o contador %ProcessorTime na categoria Informações do processador.
Selecione _Total, que fornece as estatísticas de todos os núcleos combinados.
Selecione Adicionar. A janela mostra %ProcessorTime em Contadores adicionados.
Depois que os contadores forem carregados, você verá gráficos de tendência de linha no período de coleta. Você pode selecionar ou limpar os contadores. Até agora, você adicionou apenas um contador.
Cada contador terá valores Médio, Mínimo e Máximo. Concentre-se nos valores Médio e Máximo, pois o valor médio pode variar dependendo da duração da coleta de dados. Se a atividade de alta CPU foi observada por 10 minutos enquanto a coleta geral foi de 40 minutos, os valores médios serão muito menores.
O gráfico de tendências anterior mostra que o Total Processor 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 de usar PerfInsights, você deve procurar manualmente o processo culpado neste caso.
Para esta tarefa, você deve limpar ou remover os contadores %ProcessorTime adicionados anteriormente e, em seguida, adicionar uma nova categoria:
- Processo > %ProcessorTime > Todas as Instâncias
Esta categoria carregará contadores para todos os processos em execução naquele momento.
Em um computador de produção típico, centenas ou 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 baixo ou plano.
Para acelerar esse processo, use a exibição Histograma e altere o tipo de exibição de Linha para Histograma, que fornecerá um gráfico de barras. Você descobrirá que é mais fácil escolher os processos que experimentam alto uso de CPU durante o tempo de coleta.
Como sempre haverá uma barra para Total, concentre-se nas barras que mostram uma alta taxa de exaustão. Você pode excluir as outras barras para limpar a visualização. Agora, volte para a visualização Linha.
Agora ficou 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.
A lista de ferramentas disponíveis não termina no PerfInsights for 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 Azure Monitor, você terá que fazer apenas algumas seleções para configurar e usar uma conta de armazenamento que você especificar.
Contadores básicos (padrão)
Habilitando 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.
As categorias do contador Básico são definidas como padrão. No entanto, você também pode definir uma coleção Personalizada.
Após habilitar as configurações, você pode visualizar esses contadores Convidado na seção Métricas. Você também pode definir Alertas (incluindo mensagens de e-mail) se as métricas atingirem um determinado limite.
Para obter mais informações sobre como usar o monitor Azure para gerenciar VMs Azure, consulte Monitoring Azure virtual machines with 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 ocorreu uma vez, pode ser difícil determinar qual aplicativo o causou. Se a VM do Azure foi configurada para usar OMS ou outro rastreamento de diagnóstico, você ainda pode obter informações sobre o que causou o problema.
Se você estiver lidando com um padrão repetitivo, colete os dados durante o período em que o problema provavelmente ocorrerá a seguir.
O PerfInsights ainda não tem um recurso 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 coleta do Perfmon através da linha de comando, agendá-la através do Gerenciador de Tarefas ou executá-la remotamente.
Amostra (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 a partir de um computador VM do Azure de mesmo nível na mesma VNET.
Para saber mais sobre esses parâmetros, consulte a contador de criação logman.
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 VM SKUs e diferentes opções de armazenamento em disco devem ser avaliadas mantendo o foco na carga de trabalho de produção. O processo de testar soluções em diferentes VMs pode ajudar você 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 superior que tenha mais poder de computação. Se a carga de trabalho exigir muita computação, escolha os 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.