w3wp.exe por memória

7

Em uma instalação do Small Business Server 2011, um grande número de processos do w3wp.exe parece estar usando uma quantidade desproporcional de memória. As instalações prontas para uso do SBS vêm com um total de 7 sites e 20 pools de aplicativos ASP.NET (SharePoint, Exchange, WSUS e coisas específicas do SBS como o Remote Web Workplace).

A dúzia resultante de processos w3wp.exe tende a consumir mais de 4 GB da memória do servidor ao longo do tempo, com o pool de aplicativos de pico sendo aquele pertencente ao WSUS com cerca de 800 MB no conjunto de trabalhos. Reciclar manualmente os pools de aplicativos por meio do IIS MMC ajuda a reduzir temporariamente o uso de memória (os processos w3wp.exe diminuem para 10 MB, alguns deles recuperando rapidamente), mas obviamente não é algo que um administrador deseja fazer o dia todo. Não consegui encontrar nenhuma recomendação sobre a reciclagem automática dos pools de aplicativos pré-instalados pelo SBS, portanto estou um pouco relutante em "apenas fazê-lo" em sistemas de produção.

Minha pesquisa na net sobre como limitar isso apenas lançou um número de posts informando que o consumo de memória do w3wp não prejudicaria, mas beneficiaria o desempenho, já que a memória seria "liberada quando necessário por outros aplicativos". O problema é que isso não funciona:

  • para um, um SBS é um servidor multi-funções, uma das funções (a principal) sendo o armazenamento em rede CIFS que se beneficia imensamente do armazenamento em cache do sistema de arquivos que novamente depende da memória ser "livre" como "não usado por outras processa de qualquer forma "- pools de aplicativos ASP.NET que quase nunca veem usuários e consomem memória são contraproducentes
  • outra coisa é que eu ainda tenho que ver uma diminuição substancial do consumo de memória de instâncias w3wp na falta de memória - o que eu vejo é uma pequena diminuição significativamente menor que 100 mb e troca excessiva - prejudicando novamente o desempenho

Eu quase nunca administro aplicativos do IIS ou ASP.NET, portanto, quaisquer idéias sobre como reduzir efetivamente os requisitos de memória para os pools de aplicativos são bem-vindas.

    
por the-wabbit 05.01.2012 / 14:51

4 respostas

5

Isso foi o que acabei fazendo:

definindo o cache do aplicativo do servidor para o .NET AppPools como um valor baixo (5 MB) definindo o parâmetro privateBytesLimit no web.config at %WINDIR%\Microsoft.NET\Framework\<version>\Config como sugerido em esta resposta :

    <configuration>
      <system.web>
         <caching>
           <cache privateBytesLimit="5242880" privateBytesPollTime="00:01:00" />
         </caching>
      </system.web>
    </configuration>

Isso ajudou a reduzir o uso da memória para um pouco mais de 1 GB com as configurações padrão de reciclagem do pool.

Aparentemente, usando o tipo "servidor" de coletor de lixo ( <gcServer = "true"> ) também pode levar a um consumo significativo de memória , mas, ao que parece, <gcServer> é definido como falso por padrão.

    
por 11.01.2012 / 17:09
6

Se você suspeitar que o consumo de memória resultante é um problema devido a um defeito de software, você pode usar o Microsoft DebugDiag 1.2 para criar um despejo de memória completo e analisar o despejo para problemas comuns. Se você acha que pode haver um problema de memória, é necessário ativar o rastreamento de vazamentos selecionando a opção "Monitorar fugas" e deixá-lo rodar por algum tempo antes de criar / analisar o despejo.

DebugDiag 1.2 Download do link

    
por 05.01.2012 / 17:54
6

Bem-vindo ao maravilhoso mundo da SBS. Requisitos recomendados para RAM = 10GB ... e requer um mínimo de 8GB. ( de acordo com a Microsoft .) por um bom motivo. Não é uma máquina bem lubrificada ... é muito desleixada, inchada e tem tudo debaixo do sol. Quanto mais RAM você puder jogar nessa caixa ... melhor. Infelizmente, você está limitado a um máximo de 32 gb. Qual imho ... é bobo.

    
por 05.01.2012 / 15:25
2

Você não precisa de um pool de aplicativos separado para cada aplicativo, apenas aqueles que não são confiáveis ou que você deseja priorizar. Muitos podem compartilhar (mantendo diferentes versões .net separadas). Você pode limitar de maneira mais realista a memória que um pool de aplicativos usará. Não deve haver necessidade de reciclar repetidamente as piscinas mais de uma vez por dia.

Além disso, há tanta memória que pode ser liberada dessa maneira. Enquanto alguns deles serão cache, cada aplicativo precisa de uma certa quantidade de memória de trabalho que é altamente dependente do aplicativo da web específico. Tentar restringir isso demais vai levar as coisas a um impasse.

O problema é que o SBS tenta fazer muito de uma vez, você precisa ver o que realmente usa e desligar o que não usa.

Mas, para ser honesto, apenas 11 usuários, para onde vai o restante da memória? Exchange e SQL para uso de luz certamente não precisam mais de 12Gb!

    
por 05.01.2012 / 16:57