Qual è la memoria massima che può utilizzare un sito Web / pool di app IIS6?


8

Ho un server IIS 6 in esecuzione su Windows 2003 SP2 x86. Il server ha 4 GB di RAM e funziona in modo coerente con 2 GB assegnati.

Mi rendo conto che con x86, il server non utilizzerà tutta la RAM da 4 GB e anche lo spazio dell'applicazione è limitato, ma i processi IIS sembrano essere limitati altrove. w3wp.exe non ha mai allocato più di 500 MB e ogni tanto ottengo eccezioni OutOfMemory da un'applicazione .NET occupata (ci sono diverse applicazioni in esecuzione, ognuna con un pool di applicazioni separato).

Qual è la memoria massima che può utilizzare un sito Web / pool di app IIS6?

Risposte:


7

Le app in Windows x86 sono limitate a 2 GB / ea. È possibile modificarlo aggiungendo il flag / 3gb a boot.ini, ma ciò può causare comportamenti imprevisti dell'applicazione e deve essere usato con cautela. MS ufficialmente non supporta questo ( http://technet.microsoft.com/en-us/library/bb124810.aspx )

I limiti di memoria di IIS possono essere impostati nella scheda Riciclaggio nel pool di app pertinente.

Come stai determinando che l'applicazione non superi mai i 500 MB? Se stai usando Task Manager, tieni presente che raramente (se mai) è una rappresentazione accurata dell'utilizzo della memoria come Windows lo capisce. Usa Process Explorer: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Vi sono numerose altre domande rilevanti:

  • Ci sono errori registrati nei tuoi registri eventi?
  • È una particolare riga di codice che genera le eccezioni? In tal caso, questa eccezione OutOfMemory è effettivamente un problema IIS o un problema di codice?
  • Stai limitando i tuoi pool di applicazioni con l'impostazione Recyling?
  • Ci sono altri servizi in esecuzione su questa macchina?

Molto probabilmente, IIS, ASP.NET e tutto il loro bagaglio associato stanno correndo contro il limite di 2 GB anche se Task Manager di Windows non lo mostra. L'impostazione dei limiti di riciclaggio o l'aggiornamento a x64 probabilmente farà una grande differenza.


3

ottenere occasionalmente eccezioni OutOfMemory da un'applicazione .NET occupata

La risposta a questa è troppo complessa per adattarsi a una risposta. Vedere " Ottimizzazione delle prestazioni dell'applicazione .NET " per un trattamento completo dell'argomento.

Ecco un riassunto ampiamente semplificato (ma comunque abbastanza buono) di Bruno Jouhier :

Inoltre, il runtime .NET non consente di salire a 2 GB. Il garbage collector funziona copiando oggetti vivi, quindi ha bisogno di una buona quantità di spazio per eseguire le sue copie.

Modificare:

Ecco il mio tentativo di spiegazione ...

Se ti stai chiedendo quale sia la dimensione massima della memoria del processo di lavoro (come riportato da Task Manager) per un processo di lavoro ASP.NET su x86, la risposta è "dipende" .

In qualsiasi tipo di codice gestito come Java o .NET, il programmatore rinuncia a un controllo approfondito della memoria come penitenza per non avere a che fare con i puntatori. Durante l'esecuzione di un programma, Heap e Stack verranno periodicamente ripuliti dal Garbage Collector .

In particolare per quanto riguarda ASP.NET, il garbage collector viene eseguito all'interno dello stesso processo di lavoro del sito Web. Il GC consuma memoria propria. Quanto più la memoria è interamente in funzione di come il codice dell'applicazione è scritto. Un'app potrebbe essere in grado di utilizzare 1,8 GB di memoria mentre un'altra potrebbe soffocare a 500 MB. Per capire perché , è necessario creare un profilo dell'applicazione specifica.


Concordo sul fatto che il debug delle eccezioni OutOfMemory sia complesso, grazie per il collegamento. Tuttavia, sto chiedendo come la memoria è limitata e dovrebbe essere possibile rispondere a questa domanda.
Robin M,

2

Qualsiasi processo su un sistema operativo Windows x86 è limitato a 2 GB, a meno che non sia stata impostata l'opzione / 3gb nel file boot.ini, nel qual caso un processo può utilizzare 3 GB.


Sì, ma non sono vicino a 2 GB per un processo?
Robin M,

2

Da questo post di blog "Suggerimenti per le impostazioni del pool di applicazioni di SharePoint" :

Concentrandomi sul fisico, in genere mi piace limitare i pool di app da 800 MB a 1200 MB max su un'app a 32 bit con pochissimi pool di app in base al numero e alla quantità di memoria. Su un server con 2 GB di RAM, lo imposterei a circa 800 MB max. Su un server da 4 GB di RAM circa 1 GB e oltre se di più con un massimo di circa 1200. Su un front-end Web a 64 bit con memoria da 8-16 GB ho sentito parlare di impostazioni di 2 GB di RAM o persino di permettergli di funzionare, piuttosto che limitarlo.

Devi davvero profilarlo poiché questi possono davvero crescere per elaborare e memorizzare nella cache. Maggiore è la quantità di memoria e maggiore è il carico, maggiore sarà la crescita del processo di lavoro. Quando le persone chiedono informazioni sulla configurazione del pool di app, qui è dove di solito chiedono quali dovrebbero essere i numeri. Quello che stai facendo qui è esplicitamente limitare il pool di app dal consumare più memoria. Si noti che questa impostazione si trova nella scheda Ricicla, c'è una ragione per questo.

Quando un pool di app raggiunge il massimo non è come l'impostazione del processore massimo. Farà scorrere il processo di lavoro che è come un piccolo riavvio o simile a un iisreset, ma non da quando a volte vogliamo che ciò accada in modo da poter liberare la nostra memoria. Non vuoi davvero pedalare più di un paio di volte ogni 24 ore in un mondo ideale. Ho sentito parlare di alcuni tentativi di ciclo proprio prima che si verifichi il picco mattutino in modo che abbiano la maggior quantità di memoria disponibile, quindi un ciclo proprio alla fine della giornata prima dell'inizio dei backup o della scansione.

Dalla mia esperienza 800 MB è il treshold per macchine a 32 bit (2-4 GB di RAM). Ricicla i pool di app prima di generare eccezioni "memoria insufficiente".


2

Assicurati di non impostare le dimensioni della memoria virtuale sul pool di app. Se si imposta questo valore su un numero al di fuori dell'intervallo consentito, verrà ripristinato a 512 MB. Vedi KB923197 .

Inoltre, se si esegue un'applicazione ASP.Net, ASP.Net ricicla il pool al 60% del limite di memoria di 2 GB o 1,2 GB. Questo non è il tuo scenario ~ 500, ma su apppools a 32 bit con ampio utilizzo della memoria, a volte lo diamo per ottenere un po 'più di memoria.

<system.web> 
  <processModel memoryLimit="80" />
</system.web> 

1

Su Windows 2003 è possibile impostare l'estensione di allocazione fisica (PAE) per utilizzare tutta la memoria. La memoria predefinita per un apppool IIS6 è 5 MB .


Ok, ma questo non spiega perché il processo è limitato a 500 MB. La memoria predefinita per un pool di app è interessante ma non molto pertinente o utile, mi dispiace!
Robin M,

Stai eseguendo SQL sulla stessa scatola per caso?

No. SQL non è nella stessa casella. È limitato a web / ftp / smtp utilizzando IIS.
Robin M,
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.