Se si ospitano più applicazioni web ASP .NET in application pool distinti su macchine multiprocessore dotati di SO Windows 2003 si potrebbe andare incontro ad un lento degrado delle prestazioni fino ad ottenere:
a) OutOfMemoryException
b) Classico messaggio d’errore “Server Application Unavailable”
Questo comportamento è causato dal funzionamento del meccanismo del garbage collector su sistemi multiprocessore. Su tali sistemi il GC è attivo in modalità Server; questa modalità permette di aumentare le sue prestazioni attraverso la creazione di un heap distinto per ogni processore presente, caratteristica che in presenza di vari worker process porta ad un consumo eccessivo di memoria e da qui ai messaggi di errore menzionati. Questo indesiderato comportamento delle applicazioni ASP .NET è indipendente dalla versione del .NET Framework utilizzata, e si verifica su tutte le versioni di Windows 2003 con IIS 6.0 in modalità nativa con multiple appication pool configurate.
Per ovviare a tale inconveniente occorre forzare l’utilizzo della modalità di funzionamernto “Workstation” del GC, modalità che crea sempre un solo heap e quindi non causa un eccessivo consumo di memoria anche in presenza di application pool distinti.
Per abilitare questa modalità occorre modificare il file aspnet.config, raggiungibile nella directory della specifica versione del Framework che si sta utilizzando nel percorso WIndows\Microsoft.NET\Framework, aggiungendo la seguente riga:
<gcServer enabled=”false”/>
al nodo configuration\runtime.
Questa anomalia è documentata qui