Como você estima quanta memória comprar?

10

Eu tenho um aplicativo de servidor personalizado que é executado no Windows 2008 R2. É um serviço Windows desenvolvido internamente e que suporta diversos terminais personalizados. Eu tenho uma máquina de teste que tem uma especificação semelhante ao servidor ao vivo e eu tenho um conjunto de simuladores de cliente que eu posso usar para produzir uma carga que é uma aproximação razoável do sistema real. Eu preciso ser capaz de suportar 12.000 destes e, actualmente, o servidor está a ficar sem memória (paginação está passando pelo telhado).

Meu plano era apenas iniciar 100 dos simuladores, medir o uso da memória, depois iniciar mais 100 medições de memória novamente e repetir até que a paginação começasse a subir (na verdade, eu levarei mais de três pontos de dados). um número para a quantidade de memória extra necessária para 100 simuladores e permite-me projetar a quantidade de memória necessária. Eu só preciso de uma idéia aproximada de +/- 30Gb para evitar comprar o valor total de 2Tb (US $ 150.000) que o servidor levará. Minha pergunta é se este é um método razoável de usar e, em caso afirmativo, quais contadores de desempenho você monitoraria para fornecer a quantidade de memória que está sendo usada?

Estou falando especificamente sobre memória aqui, já que a diferença entre Conjunto de Trabalho, Bytes Privados, Comprometidos, Compartilhados, Virtuais e todos os outros termos de memória me confundem. Eu acho que consigo monitorar CPU, IO e Networking sozinho. A outra coisa que eu notei é que o .Net Cache ajusta seu uso de memória dependendo do que está disponível, o que dificulta a visualização de uma tendência.

    
por Martin Brown 13.02.2012 / 11:55

2 respostas

8

Honestamente? Eu NÃO FAÇO .
Ao especificar um servidor que verá qualquer tipo de carga de trabalho real, eu comprimi o máximo de RAM possível (os sistemas são mais propensos a ter restrições de RAM do que a CPU ou o Disco restringido - o único outro gargalo garantido é o lado frontal ônibus).

Se você quiser descobrir o quanto de RAM seu aplicativo pode usar um teste de carga básico, como você propôs, é um bom começo, mas se você já tiver este sistema em produção (parece você faz) e seu sistema de produção está trocando sua tarefa é mais fácil: Descobrir quanto espaço de swap você está usando - > Adicione pelo menos 2x essa quantidade de RAM (arredonde para caber nas restrições de tamanho do DIMM do seu sistema).

Se você realizar um teste de carga para obter números aproximados e extrapolar a partir daí, lembre-se de considerar algumas coisas:

  1. A curva de memória provavelmente será dois segmentos distintos
    (Inicialização abrupta como estruturas / bibliotecas compartilhadas são armazenadas em cache, em seguida, uma curva um pouco menos íngreme como código un-shareable de cada novo aplicativo é colocado na memória)

  2. Você ainda precisa da RAM livre para o cache de bibliotecas compartilhadas e em disco e para o sistema operacional.
    (Isso deve ser pelo menos alguns shows sobre o que seu aplicativo precisa)

  3. TODO o software vaza memória (pelo menos todo software prático faz), portanto, observe isso em seus testes e certifique-se de ter espaço para lidar com um vazamento.

  4. Sua carga provavelmente aumentará durante a vida útil do servidor. Planeje adequadamente.
    (Se você não tiver bons números de planejamento de capacidade, duplique a carga de trabalho de hoje e planeje lidar com isso).

  5. Comprar muita RAM hoje é mais barato do que ter o seu ambiente em queda amanhã.

    • Primeiro Corolário: Se você comprar um servidor um pouco maior do que o necessário, você será o administrador presciente que manteve a empresa funcionando. Você será em grande parte ignorado e desvalorizado.
    • Segundo Corolário: Se você sub-dimensionar a máquina e houver problemas, você é o palhaço incompetente que não conseguiu prever um crescimento de 500%, e todo mundo odeia você.
por 14.02.2012 / 19:13
0

Obrigado, a atualização, pelo menos, dá uma pista a todos. Que você está contemplando 2Tb de memória significa que você está jogando em um estádio diferente das configurações usuais. Grande sistema. odeio pensar em quanto calor será produzido.

Dado que é um processo interno do servidor e que está a ficar sem memória (não diz em que nível começa a paginação), mas gostaria de eliminar a possibilidade de o processo do servidor consumir quantidades cada vez maiores de memória antes de prosseguir. Se isso acontecer, não faz diferença o que você faz, o sistema parará em algum momento.

Eu não sei de nenhuma ferramenta genérica que você possa usar para dar muito mais do que uma visão geral básica do que está acontecendo ... o que vem com o Windows. O processo de serviço em si é uma caixa preta e sua equipe de desenvolvimento precisa fornecer ferramentas de monitoramento.

Volta rápida do cálculo do envelope:

2Tb of memory = 1024Gb = 1024*1024Mb = 1048576Mb
1048576Mb / 13000 connections = around 80mb per session

Isso não estaria fora do intervalo de um conjunto de trabalho normal do exe .net.

O serviço tem vários segmentos? Se eles estão lançando um tópico para cada conexão, vale a pena observar como eles estão fazendo isso. ProcExp.exe da Microsoft é uma maneira fácil de ver se você tem vários segmentos e o que esses segmentos estão consumindo. Ele não sabe sobre .net, mas lhe dará contadores win32.

Você pode indicar quanta memória e quantas conexões você tinha ao fazer seu teste antes de começar a paginação?

Então, como estabelecer se o processo do servidor tem problemas de vazamento de memória? Pode estar acumulando mais memória com cada sessão conectada, ou pode estar acumulando memória e não liberando-a nunca.

O que você poderia fazer é - escolha um número de sessões que não provoquem paginação e simulem esse número de conexões. - Execute a simulação por algumas horas e use o perfmon para observar os contadores básicos de memória. - Repita esses testes com sessões que se conectam brevemente e desconectam.

A idéia é ver se o serviço está consumindo mais e mais memória em cada sessão, ou se sessões abertas provocam o uso crescente de memória.

    
por 15.02.2012 / 12:35