Como posso saber se meu servidor Windows está trocando?

29

Estou usando o Process Explorer para monitorar meu servidor Windows enquanto ele reconstrói alguns dados. É principalmente um processo intensivo de CPU, mas quero ter certeza de que não está trocando. Como posso saber se está usando o Process Explorer? Meu palpite inicial está na janela Informações do sistema, é Delta de gravação de arquivo de paginação. Sim? Não? Eu sou um idiota?

* A captura de tela não é do servidor ... apenas um exemplo.

texto alternativo http://www.malwareinfo.org/bootcamp/img/ProcessExplorer2.jpg

churnd
fonte

Respostas:

30

"Entrada de páginas / s é o contador a ser observado, mas você não deve se preocupar com a" troca ", pois o Windows não usa o arquivo de paginação como * nixes.

Primeiro você precisa entender que as páginas do Windows não saem. Vou citar a parte relevante do post de Eric Lipperts no blog (levemente editado), pois não posso dizer melhor:

"A RAM pode ser vista apenas como uma otimização de desempenho. Acessar dados na RAM, onde as informações são armazenadas em campos elétricos que se propagam perto da velocidade da luz, é muito mais rápido do que acessar dados em disco, onde as informações são armazenadas em um volume enorme e pesado. moléculas de metais ferrosos

O sistema operacional controla quais páginas de armazenamento a partir de quais processos estão sendo acessados ​​com mais freqüência e faz uma cópia delas na RAM, para aumentar a velocidade. Quando um processo acessa um ponteiro correspondente a uma página que não está atualmente armazenada em cache na RAM, o sistema operacional faz uma “falha de página”, sai para o disco e faz uma cópia da página do disco para a RAM, assumindo razoavelmente que está prestes a ser acessado novamente em breve.

O sistema operacional também é muito inteligente em compartilhar recursos somente leitura. Se dois processos carregarem a mesma página de código da mesma DLL, o sistema operacional poderá compartilhar o cache da RAM entre os dois processos. Como o código provavelmente não será alterado por nenhum dos processos, é perfeitamente sensato salvar a página duplicada da RAM compartilhando-a.

Mas mesmo com um compartilhamento inteligente, eventualmente, esse sistema de cache ficará sem memória RAM. Quando isso acontece, o sistema operacional adivinha quais páginas têm menos probabilidade de serem acessadas novamente em breve, as grava no disco se tiverem sido alteradas e libera a RAM para ler algo que tem mais probabilidade de ser acessada novamente em breve.

Quando o sistema operacional adivinha incorretamente, ou, mais provavelmente, quando simplesmente não há RAM suficiente para armazenar todas as páginas acessadas com frequência em todos os processos em execução, a máquina começa a "debulhar". O sistema operacional gasta todo o tempo escrevendo e lendo o caro armazenamento em disco, o disco é executado constantemente e você não realiza nenhum trabalho.

Isso também significa que "ficar sem memória RAM" raramente resulta em um erro de "falta de memória". Em vez de um erro, resulta em um desempenho ruim, porque o custo total do fato de o armazenamento estar realmente em disco se torna repentinamente relevante.

Outra maneira de analisar isso é que a quantidade total de memória virtual consumida pelo seu programa não é realmente muito relevante para o seu desempenho. O que é relevante não é a quantidade total de memória virtual consumida, mas sim, (1) quanto dessa memória não é compartilhada com outros processos, (2) qual o tamanho do "conjunto de trabalho" das páginas mais usadas e ( 3) se os conjuntos de trabalho de todos os processos ativos são maiores que a RAM disponível.

A essa altura, deve ficar claro por que os erros de “falta de memória” geralmente não têm nada a ver com a quantidade de memória física que você possui ou com a quantidade de armazenamento disponível. É quase sempre sobre o espaço de endereço, que no Windows de 32 bits é relativamente pequeno e facilmente fragmentado. "

Alguns pontos adicionais:

  1. DLLs e arquivos de programa são sempre apenas paginados, nunca saídos, pois já estão no disco (e geralmente as primeiras páginas são liberadas quando a memória RAM fica baixa)
  2. é muito mais provável que você fique sem entradas de tabela de página gratuitas ou tenha uma memória altamente prejudicada do que quaisquer outros problemas de memória (além do desempenho geral ruim, como já mencionado)
  3. mesmo se você executar sem um arquivo de paginação, ainda poderá obter falhas na página
  4. de um modo geral, olhar para a memória comprometida é mais revelador de como um processo usa a memória

Para obter uma imagem completa de como o gerenciamento de memória funciona no Windows, consulte

O Gerenciador de memória virtual no Windows NT

se você acha que tem um problema de memória, sugiro assistir a esta apresentação sobre como solucionar problemas de memória do Windows

Aqui está uma ótima explicação de por que às vezes você fica "sem memória" quando não está graças à fragmentação da memória:

Consulte também Empurrando os limites do Windows: Memória física

Mais sobre memória virtual, fragmentação e vazamento de memória e WOW64

RAM, memória virtual, arquivo de paginação e tudo mais (suporte da microsoft)

Atualizar:

O Windows 10 faz algo um pouco diferente com a memória e, com o tempo, você verá um processo chamado "Sistema e memória compactada". O Windows 10 adiciona um "armazenamento de compactação" à lista de paginação. Essa ram é a memória do USUÁRIO que pertence ao sistema (normalmente o sistema tinha apenas memória do kernel). Essa memória é compactada para uma redução média de cerca de 30%. Isso permite que mais páginas sejam armazenadas na memória (para aqueles que fazem matemática com 70% mais espaço). Observe que, se a memória ainda tiver pressão, as páginas do armazenamento de compactação (espaço de processo do sistema no modo de usuário) podem ser colocadas no módulo modificado. lista (compactada) que pode ser gravada no arquivo de paginação físico. O sistema verá que eles são do espaço do modo de usuário do sistema e compactados e não tentará colocá-los de volta na loja. Portanto, nos sistemas Windows 10, pode parecer que o sistema está inalando RAM, mas, na verdade, está apenas tentando ser mais eficiente no uso de RAM. Os usuários de Mac usam um recurso semelhante desde 2013, e as versões mais recentes do kernel Linux empregam uma versão da compactação de memória. Esse método de conservação de memória não é apenas melhor, mas já é comum entre outros sistemas operacionais.

Jim B
fonte
6

Sim, os deltas de paginação forneceriam uma indicação ao vivo de quanto o servidor está paginando (ou "trocando"), mas apenas naquele momento. Para observar isso mais de perto e ver uma visão histórica, sugiro usar o Monitor de desempenho ( perfmon.exe ) para mapear ou registrar esses deltas (e quaisquer outros contadores de desempenho que possam ajudar a correlacionar eventos ou atividades específicas com picos no atividade de paginação).

Jessica McKinnon
fonte
5

Performance Monitor (perfmon) é seu amigo aqui. Você está procurando falhas de página rígida (ou seja, falhas de página quando a página de memória necessária para atender à solicitação deve ser lida no disco), portanto, o monitoramento de falhas de página rígida e flexível não é ideal.

Observe o contador "Entrada de páginas / s" no objeto "Memória" usando o perfmon para ter uma idéia de quantas falhas de página estão ocorrendo.

Evan Anderson
fonte
0

Uma boa regra geral é que, se sua carga de confirmação for maior que sua memória física, você definitivamente estará paginando alguma coisa , mas se seu aplicativo usar um único buffer de dados fixo que está sempre sendo mantido em uso, geralmente não será paginado fora em tudo. Pode haver algum atraso na inicialização enquanto outra memória é paginada para liberar espaço para isso.

Maximus Minimus
fonte
3
mh: Não tenho certeza se concordo com sua regra de ouro. Se a carga de confirmação for maior que a memória física, isso significa simplesmente que algo foi paginado em algum momento, mas o sistema ainda não está necessariamente paginando nada. Algo só será paginado quando ocorrer uma falha na página. Caso contrário, eu concorda que o uso de um único buffer de dados fixa seria melhor, mas então eu acho que nós provavelmente está se movendo para o reino da stackoverflow.com
Jessica McKinnon
Meu mal, eu deveria ter dito "algo foi trocado no passado, e solicitações futuras de memória também exigirão troca".
Maximus Minimus
Isso não é necessariamente verdade. Um aplicativo pode apenas bloquear páginas na memória, pois possui esse privilégio no SO.
Jim B