posts - 644, comments - 2003, trackbacks - 137

My Links

News

Raffaele Rialdi website

Su questo sito si trovano i miei articoli, esempi, snippet, tools, etc.

Archives

Post Categories

Image Galleries

Blogs

Links

Performance e Garbage Collector

Lo speaker per le performance del garbage collector è Claudio Caldato, un Italiano a Redmond  con cui io e Mauro abbiamo scambiato quattro chiacchere prima della sessione.

Il primo argomento è quello dei Performance Counters. I due contatori principali sono % Time in GC e Allocated bytes/sec che viene aggiornato solo dopo la garbage collection. Poi viene il numero di collection nelle tre generazioni il cui rapporto ideale è 10:
1 tra le generazioni 1 e 2. A ruota gli altri contatori su cui Claudio fa una panoramica.

Poi si passa alle OutOfMemory exceptions che oltre alle cause più ovvie possono anche essere dovute alla frammentazione della virtual memory. Nonostante il lavoro del GC, può capitare quando vengono allocati/disallocati un numero molto elevato di piccoli oggetti, oppure quando vengono caricati molti piccoli assembly (asp.net in debug mode crea un assembly per ogni pagina, quindi questa è uno dei casi).

Poi si passa ad una demo che dimostra cone risolvere i problemi di frammentazione avvalendosi di AdPlus.vbs per eseguire il dump del processo.

Lo step successivo è di come capire l'eccessivo utilizzo di virtual memory. Il consiglio iniziale è quello di misurare sempre la dimensione dell'heap dopo una collection della generazione 2. Un ottimo consiglio è quello di usare DumpHeap -stat per ottenere un report in fondo al; quale si può dedurre il problema. Se il problema sembra l'uso eccessivo di stringhe, una soluzione può essere di usare string.Intern. Molto bella la seconda demo che mostra come fermare Windbg al termine della colection di generazione 2 per confrontare le allocazioni di memoria dopo ogni collection che è l'unico momento in cui ha senso il confronto.

Poi ancora sulla frammentazione dell'heap il cui tipico motivo è l'eccessivo numero di oggetti pinned.
Per l'eccessivo uso di cpu nelle collection, se il rapporto tra Gen1 e Gen2 è alto, le generazioni durano troppo altrimenti ci sono troppe collection che probabilmente dipendono da come vengono allocati gli oggetti nell'applicazione.

Difficile raccontare tutti i tip elencati da questa bellissima sessione di Claudio a cui faccio i miei migliori complimenti per la preparazione e per la presentazione.

Print | posted on mercoledì 8 novembre 2006 15:33 |

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET