Come limitare la memoria utilizzata da un'applicazione in IIS?


17

I processi di lavoro IIS stanno occupando molta memoria sui nostri server. Voglio limitare la memoria che ogni applicazione può usare. Sono confuso se devo impostare un limite sul limite di memoria virtuale o sul limite di memoria privata. Ogni applicazione nel nostro IIS è nel proprio pool di applicazioni.

Se imposto il limite di memoria privata su 500 MB e il limite di memoria virtuale su 3 GB. Quando ricicla il pool di applicazioni? Ricicla dopo aver raggiunto i 500 MB o dopo aver raggiunto i 3 GB.


Dove sono queste opzioni "Limite memoria virtuale" e "Limite memoria privata" di cui parli?
Colonnello Panic,

1
@ColonelPanic Su IIS7.5, si trovano nella sezione di un pool di app Advanced Settings -> Recycling.
ngm

Risposte:


16

IIS rispetterà entrambi questi limiti.

Se si imposta un limite di byte privati ​​di 500 MB, non appena un processo di lavoro tenta di eseguire il commit di 501 MB, IIS avvia un nuovo processo di lavoro e uccide quello precedente.

Se si imposta un limite di memoria virtuale da 3 GB, non appena un processo di lavoro tenta di riservare 3.001 GB, IIS avvia un nuovo processo di lavoro e uccide quello precedente.

Se si utilizza una piattaforma a 64 bit, è necessario tenere presente che l'app ASP.NET riserva in modo aggressivo la memoria virtuale. Ad esempio, ho un'app in una farm che utilizza solo 88 MB di byte privati, ma al momento ha una dimensione virtuale di 5,4 GB. Credo che la prenotazione della memoria virtuale sia una funzione della RAM fisica sul server. È anche importante capire che su una piattaforma a 64 bit, riservare grandi porzioni di memoria virtuale ha un impatto zero sulle prestazioni.

Fondamentalmente, se si verificano problemi di consumo di memoria su un server IIS, l'impostazione che si desidera limitare è Memoria / byte privati, questo è ciò che corrisponde all'utilizzo effettivo della memoria.


Grazie Dominic, esiste un modo per impostare un processo per utilizzare la memoria privata da 500 Mb e una volta superato tale limite, iniziare a utilizzare la memoria virtuale sul disco senza riciclarla?
kishore,

2
Non che ne sia consapevole. In un'applicazione ASP.NET una volta che inizi ad avere problemi di byte di commit, in pratica hai 3 opzioni. 1. Riciclare il processo quando si raggiunge il limite o di notte a un'ora di riposo (ovviamente non preferito, e non dimenticare di gestire correttamente i dati della sessione se il riciclaggio durante una finestra di utilizzo) 2. Ottieni memoria fisica aggiuntiva per l'applicazione (aggiungi RAM alla server farm o passare a una farm diversa, questa può essere la soluzione più semplice a seconda della situazione). 3. Modificare l'applicazione in modo che utilizzi la memoria in modo più efficiente. (Opzione migliore, ma può essere difficile da implementare)
Dominic D

Ho anche notato la prenotazione aggressiva della memoria in diverse app ASP.NET. Qualcuno può consigliare alcune buone risorse su questo argomento per studiare? Mi piacerebbe capire di più su come e perché succede ... Quello che osservo è che più memoria è disponibile, più memoria le app allocano.
Tom Pažourek,
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.