2010-02-23 10 views
5

Ecco la mia situazione. Voglio una spiegazione del perché questo sta accadendo. Sto leggendo su GC here ma ancora non capisco.Perché mi sembra che ci sia una perdita di memoria quando l'utente "Server" garbage collection?

caso Workstation: Quando eseguo con la raccolta dei rifiuti workstation, i miei rampe app fino a utilizzare circa 180 MB di byte privati ​​e circa 70MB in "#bytes Memoria CLR .NET in tutti i cumuli". La memoria continua ad essere stabile per diverse ore. La vita è bella.

caso Server: Quando eseguo con la raccolta dei rifiuti di server miei rampe app fino a utilizzare circa 500MB di byte privati, ma ancora solo circa 70MB in "#bytes Memoria CLR .NET in tutti i cumuli". Un'analisi dell'output! DumpHeap -stat e! GCRoot mostra molti oggetti senza radici. Inoltre, i miei byte privati ​​aumentano in modo significativo per diverse ore ma i byte .NET rimangono costanti. La mia app utilizza un sacco di codice non gestito, quindi penso che questo sia correlato alla differenza dei byte privati ​​e .NET. Ma perché la mia vita è così brutta nel caso del server?

Qualche saggezza o guida GC su ulteriori indagini?

Grazie!

risposta

5

"Garbage Collection del server" è progettato per applicazioni ad alto throughput, principalmente su server in cluster.

Un GC del server è costoso e sospende l'esecuzione di thread mentre accade. Come tale, ci vuole un lotto di quantità di memoria in più prima che si inneschi effettivamente - se hai ancora della memoria di riserva, non stupirti se il garbage collector non sente il bisogno di passare e ripulire ancora.