Rastreando a alta utilização da CPU do Windows Server

1

Eu tenho um servidor Windows 2003 (64 bits) em execução como uma VM em um recurso de hospedagem remota. (Estou apenas alugando essa instância virtual em particular, então não sei em que tipo de hardware subjacente está sendo executado, além de estar se apresentando à VM como tendo oito CPUs disponíveis.)

O problema é que a partir de cerca de 1-2 semanas atrás, o taskmgr.exe começou a mostrar algo como uma carga total de 60% da CPU, distribuída uniformemente em 7 de seus 8 procs, mas com um proc aumentado em 100%. E o servidor está respondendo como você esperaria quando está ocupado: é um cachorro. Eu obviamente gostaria de rastrear o que está causando isso.

O problema é que% da CPU para cada processo, como mostrado em taskmgr.exe ou procexp.exe, não chega a nenhum valor próximo a 100%. Em outras palavras, o processo ocioso do sistema está em torno de 40%, e alguns outros processos talvez somem outros 10%, mas de onde vêm os outros 50%? Em outras palavras, algo está consumindo 50% da minha CPU, e não está listado em nenhum lugar no gerenciador de tarefas. ("Mostrar processos de todos os usuários" está marcado.)

Eu tentei parar todos os serviços que pude, mas nenhum deles teve impacto na CPU. Reiniciar o servidor não faz diferença: quando eu fizer login novamente, a CPU é rastreada novamente. Procexp.exe não mostra nada fora do comum.

Eu posso pensar em duas possíveis explicações: (1) Existe algum tipo de rootkit que aparece no meu servidor e está se escondendo da lista de processos; ou (2) taskmgr.exe é subitamente (e pela primeira vez) mostrando a utilização no resto da caixa, não apenas nesta instância específica (embora isso não pareça certo).

Alguma outra sugestão para rastrear isso?

    
por Ken Smith 20.05.2011 / 05:57

1 resposta

1

Eu vejo duas coisas possíveis que você deve analisar.

Primeiro, sempre que ouço alguém falar sobre alta carga de CPU, sem poder identificar nenhum processo ofensivo, a contenção de IO é meu primeiro palpite. Quando há alta contenção de E / S, os processos são empilhados em estado ininterrupto de suspensão, preenchendo o agendador de processos do sistema operacional com tarefas que estão ali apenas esperando que os dados sejam lidos ou gravados no disco. Os processos individuais não seriam mostrados como tendo alta carga de CPU. Você precisará examinar as estatísticas de desempenho do subsistema de disco que está atendendo essa VM para ver se algum ou mais dos possíveis afunilamentos de E / S estão sendo atingidos.

Em segundo lugar, você mencionou ter uma VM de 8 CPUs. Você tem certeza absoluta de que precisa de muitos núcleos? Você tem certeza? Ok, pergunte-se novamente se você realmente precisa deles. A razão disso é que, sob virtualização, vários núcleos não funcionam da mesma forma como se você estivesse executando em bare metal. O único momento em que sua VM obterá tempo de CPU no host será quando houver 8 núcleos disponíveis. Se 8 núcleos não estiverem disponíveis, você não recebe ciclos de CPU. Em um host com carga moderada, é desnecessário dizer que é muito mais difícil para o hipervisor programar o tempo de CPU para uma VM de 8 núcleos do que para uma VM de núcleo único. Por esta razão, eu recomendo ficar com um único núcleo a menos que seja 100% absolutamente necessário para o aplicativo, ponto em que eu posso alocar 2 ou no máximo 4 núcleos, nesse caso eu farei com certeza que não há muito mais acontecendo no host, para que o desempenho dessa VM não sofra.

Então - você pode ter um rootkit? Claro, possivelmente, e é melhor você fazer uma diligência para determinar se é ou não o caso. Se não, no entanto, você certamente tem outras coisas para ver.

    
por 20.05.2011 / 06:29