w3wp.exe memoria dei maiali


8

In un'installazione di Small Business Server 2011 un numero intero di processi w3wp.exe sembra utilizzare una quantità sproporzionata di memoria. Le installazioni predefinite di SBS vengono fornite con un totale di 7 siti e 20 pool di applicazioni ASP.NET (Sharepoint, Exchange, WSUS e cose specifiche di SBS come Remote Web Workplace).

La dozzina risultante di processi w3wp.exe tende a consumare nel tempo più di 4 GB di memoria del server con il pool di applicazioni di picco che è quello appartenente a WSUS con circa 800 MB nel set di lavoro. Il riciclo manuale dei pool di applicazioni tramite IIS MMC consente di ridurre temporaneamente l'utilizzo della memoria (i processi w3wp.exe si riducono a 10 MB, alcuni dei quali ricrescono rapidamente), ma ovviamente non è qualcosa che un amministratore desidera fare tutto il giorno. Non sono riuscito a trovare consigli sul riciclaggio automatico dei pool di applicazioni preinstallate da SBS, quindi sono in qualche modo riluttante a "farlo" sui sistemi di produzione.

La mia ricerca in rete su come limitare questo ha solo sollevato una serie di post che affermano che il consumo di memoria di w3wp non danneggerebbe ma gioverebbe alle prestazioni poiché la memoria verrebbe "liberata quando necessario da altre applicazioni". Il problema è che non funziona:

  • per uno, uno SBS è un server multi-ruolo, uno dei ruoli (il principale) è l'archiviazione di rete CIFS che beneficia immensamente della memorizzazione nel filesystem che si basa ancora sulla memoria "libera" come in "non utilizzata da altri processi in alcun "- I pool di applicazioni ASP.NET che non vedono quasi mai gli utenti e che consumano memoria sono controproducenti
  • un'altra cosa è che devo ancora vedere una sostanziale riduzione del consumo di memoria delle istanze w3wp in caso di carenza di memoria - quello che vedo è una diminuzione minore di significativamente inferiore a 100 mb e uno scambio eccessivo invece - di nuovo danneggiando le prestazioni

Non gestisco quasi mai le app IIS o ASP.NET, quindi qualsiasi idea su come tagliare in modo efficace i requisiti di memoria per i pool di applicazioni è benvenuta.


Cosa fa questa app ASP.NET? Ho visto w3wp.exe utilizzare molta memoria quando un'app non riesce a chiudere le connessioni con Linq-To-SQL o Entity Framework.
Nate,

Ce ne sono diversi. Molti sono correlati a Exchange come OWA / OMA e servizi di sincronizzazione, uno eccezionalmente grande è WSUS, alcuni sono utilizzati per Sharepoint o siti personalizzati specifici di SBS (CompanyWeb, Remote Web Workplace)
the-wabbit

Risposte:


7

Benvenuti nel meraviglioso mondo di SBS. Requisiti consigliati per RAM = 10 GB ... e RICHIEDE un minimo di 8 GB. ( secondo Microsoft .) per una buona ragione. Non è una macchina ben oliata e ben regolata ... è molto sciatta, gonfia e ha tutto sotto il sole raggruppato insieme. Più RAM puoi lanciare in quella scatola ... meglio è. Sfortunatamente, hai un limite massimo di 32 GB. Quale imho ... è sciocco.


Immagino che dovrei affinare un po 'la mia risposta. Se sei preoccupato per la quantità di RAM che sta consumando, risparmierai molto tempo / mal di testa effettuando una delle seguenti operazioni: A) Non usare SBS ... usa il server standard e imposta i ruoli che DEVI individualmente. oppure B) Getta più RAM nel sistema ... poiché la RAM è piuttosto economica. SBS è progettato per uffici molto piccoli ... (10-20 postazioni di lavoro ...) e non si adatta molto bene.
TheCompWiz

Grazie per la tua risposta. Il sistema in cui ho osservato il comportamento aveva 16 GB di RAM, che è il limite fisico. La memoria disponibile si è rapidamente riempita con store.exe di Exchange e numerose istanze di SQL Server e w3wp.exe che non sono solo "non ottimizzate", ma sono un vero e proprio Braindead. So come gestire i problemi di consumo eccessivo di memoria degli altri due mentre gestisco frequentemente i sistemi Exchange e SQL Server, ma con w3wp sono in qualche modo in perdita. La rete stessa ha solo 11 utenti.
the-wabbit il

Exchange, SQL Server e IIS hanno tutti meccanismi che proveranno e consumeranno il 100% della RAM per i dati "memorizzati nella cache". Se qualcos'altro richiede più RAM ... tutti e 3 dovrebbero ridimensionare per consentire l'esecuzione di altri servizi senza ricorrere allo scambio. (in teoria) In pratica, tuttavia, trovo che devi solo rotolare con i pugni su alcune cose ... Puoi provare a modificare tutto manualmente e impostare limiti rigidi ... ma ti inseguirai mai la coda Quella. Vedrò se riesco a trovare un articolo che ho letto qualche anno fa sulla limitazione dei pool di applicazioni in IIS per te ...
TheCompWiz



7

Questo è quello che ho finito per fare:

impostando la cache dell'applicazione server per .NET AppPools su un valore basso (5 MB) impostando il parametro privateBytesLimit in web.configat %WINDIR%\Microsoft.NET\Framework\<version>\Configcome suggerito in questa risposta :

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

Ciò ha contribuito a ridurre l'utilizzo della memoria a poco più di 1 GB con le impostazioni predefinite di riciclaggio del pool.

Apparentemente, l'utilizzo del tipo "server" di Garbage Collector ( <gcServer = "true">) può comportare anche un significativo consumo di memoria , ma a quanto pare <gcServer>è impostato su false per impostazione predefinita.


CRONACA - un po 'indietro abbiamo cominciato impostando gcserver false dopo la lettura di questi articoli: forums.asp.net/t/1654596.aspx/1 e msdn.microsoft.com/en-us/library/ff647787.aspx
Greg Askew

@ the-wabbit Il consiglio di impostare gcServer = false è ancora attuale ora che la garbage collection del server avviene contemporaneamente?
Michael Steele,

6

Se si sospetta che il consumo di memoria risultante sia un problema a causa di un difetto del software, è possibile utilizzare Microsoft DebugDiag 1.2 per creare un dump di memoria completo e analizzare il dump per problemi comuni. Se si ritiene che potrebbe esserci un problema di memoria, è necessario abilitare il rilevamento delle perdite selezionando l'opzione "Monitora perdite" e lasciarlo funzionare per un po 'prima di creare / analizzare il dump.

DebugDiag 1.2 Scarica
https://www.microsoft.com/download/en/details.aspx?id=26798

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


Grazie per il link, ci proverò. Il pacchetto di installazione MSI sembra avere problemi quando viene eseguito su versioni localizzate (non statunitensi) di Windows, devo vedere se esiste una soluzione alternativa a questo.
the-wabbit il

2

Non è necessario un pool di app separato per ogni app, solo quelli che non sono affidabili o ai quali si desidera dare priorità. Molti possono condividere (mantenendo diverse versioni .net separate). È quindi possibile limitare in modo più realistico la memoria che verrà utilizzata da un pool di app. Non dovrebbe essere necessario riciclare ripetutamente i pool più di una volta al giorno.

Inoltre, c'è così tanta memoria che può essere liberata in questo modo. Sebbene parte di essa sarà cache, ogni app necessita di una certa quantità di memoria di lavoro che dipende fortemente dall'app Web specifica. Cercare di limitare questo troppo porterà a una brusca frenata.

Il problema è davvero che SBS cerca di fare troppo in una volta, è necessario guardare a ciò che effettivamente si utilizza e chiudere ciò che non si fa.

Ma a dire il vero per soli 11 utenti, dove sta andando il resto della memoria? Exchange e SQL per un uso leggero non richiedono certamente più di 12 GB!


Ah, non hai mai sperimentato la bellezza di una SBS, vero? L'archivio informazioni di Exchange sale a 8 GB quando non è limitato, più istanze del server SQL occuperanno felicemente altri 3 GB. La maggior parte dei pool di app esegue solo 1-2 applicazioni con la stessa versione .NET e nello stesso contesto di sicurezza. Tuttavia, non posso raggrupparli a causa di problemi di supporto. Inoltre, è improbabile che risolva i problemi di memoria: se ho solo 4 processi da 1 GB anziché 12 più piccoli, non si vince molto.
the-wabbit il

La differenza con un minor numero di pool di app è che le varie cache saranno piene di ciò che viene regolarmente utilizzato, eliminando ciò che non lo è. Con un sacco di pool di app ci saranno più sprechi. Di quanti contesti di sicurezza hai effettivamente bisogno con 11 utenti? Sì, Exchange utilizzerà allegramente tutta la memoria che può mettere in pratica, ma funzionerà anche felicemente a soli 2 GB per quei pochi utenti se lo limiti. Con SBS devi accettare che non puoi usare le migliori pratiche ovunque o eseguire una delle opzioni in modo ottimale, devi essere un po 'pragmatico e non troppo ingegnere.
JamesRyan,

Bene, se stai cercando di eseguire 20 istanze di esso su un server, non c'è da meravigliarsi se stai cercando di riempire tutto in memoria. Avresti davvero dovuto menzionarlo nella domanda poiché mette le cose sotto una luce completamente diversa.
JamesRyan,

In realtà non lo faccio - come ho affermato, il problema sorge con un sistema fisico in cui i pool di app usati raramente rubano memoria dalla cache del filesystem molto più preziosa. Sospettavo che ciò sarebbe dovuto a un po 'di cache degli oggetti all'interno dei pool di applicazioni e cercavo dei mezzi per ridurre / disabilitare la cache.
the-wabbit il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.