Download - Le garbage collector .NEt
www.talentsoft.com
IDENTIFIERÉVALUERDÉVELOPPERPLANIFIER
Auteur(s)/Intervenant(s) : Date :
Autour du Framework .NET
La gestion de la mémoire
Olivier MARTINEToctobre2013
2
Sommaire
• Le framework .NETLa compilationCLR
• La gestion de la mémoireHeapStack
• Le garbage-collectorSon rôleSon fonctionnementSes configurationsSon avenir
• Comment monitorer sa mémoire
3
Le Framework .NET – La compilation
4
Framework .NET – Common Langage Runtime
« Le CLR (Common Language Runtime) est le cœur de Microsoft .NET Framework et fournit l'environnement d'exécution de la totalité du code .NET Framework. »
Le CLR fournit divers fonctions et services requis pour l'exécution du programme:
•La compilation juste-à-temps (JIT just in time)
•la mise en application de la cohérence des types (CTS common type system)
•la gestion des exceptions
•la gestion des threads
•l'allocation et la gestion de la mémoire
5
La gestion de la mémoire
Pile (stack)
•Allocation statique•Appels des fonctions•Le type valeur ( struct )•Durée de vie cours (contexte de création)
Tas (heap)
•Allocation dynamique•Zones nécessitant d’être libérée ensuite•Le type référence comme une instance de classe ou de tableau, est alloué dans une zone de mémoire différente appelée tas.•Durée de vie (long) (référencé)
6
Stack
B()
Class1 instance;
La gestion de la mémoire
Heap
Main
A()
Instance3
Instance4
Instance2Class2 instance;
int i;
struct i;
Class3 instance;
Instance1
7
La gestion de la mémoire - Stack
• Limite: 1Mo par défaut
• Exception StackOverflowException
Exemple
8
La gestion de la mémoire - Heap
• Limite: 2Go (Limite système)
• Exception OutOfMemoryException
Exemple
9
Le garbage-collector – Son rôle(ramasse-miettes)
• Il vous permet de développer sans avoir à libérer de la mémoire.
• Il alloue efficacement les objets sur le tas managé.
• Il libère les objets qui ne sont plus utilisés, efface leur mémoire et garde la mémoire disponible pour les futures allocations.
• Il sécurise la mémoire en s'assurant qu'un objet ne peut pas utiliser le contenu d'un autre objet.
10
Le garbage-collector – Son fonctionnement
1. Initialisation du GC par le CLR
2. Allocation d’un segment de mémoire pour stocker et gérer des objets sur tas managé.
• Il existe un tas managé pour chaque processus managé.
• Tous les threads du processus allouent des objets sur le même tas.
11
Le garbage-collector – Son fonctionnement
• le garbage-collector libère la mémoire occupée par les objets morts.
Le processus de libération compacte les objets vivants afin qu'ils soient déplacés ensemble.
• L'espace inutilisé est supprimé, ce qui entraîne la diminution du tas.
12
Le garbage-collector – Son fonctionnement
1. Arrêt de tout les threads
2. Crée une liste de tous les objets actifs.
3. Mise à jour des références aux objets qui seront compactés
4. Une phase de compactage qui libère l'espace occupé par les objets morts et compacte les objets survivants. La phase de compactage déplace les objets qui ont survécu à un garbage collection vers l'extrémité la plus ancienne du segment.
13
Le garbage-collector – Son fonctionnement
Le tas est organisé en générations.
•Génération 0 objets éphémères (zone majeure de garbage collection)
•Génération 1 objets éphémères
•Génération 2 objets durables
14
Le garbage-collector – Son fonctionnement
• Une opération de garbage collection se fait sur une génération est ses génération plus jeune.
• Garbage Collection de génération 2 garbage collection complet
• Les objets survivants à une collection sont promus à la génération suivante
15
Le garbage-collector – Sa Configuration
• Le garbage collector s'ajuste automatiquement.
• gcServer (optimisation >2 processeurs)• Uniquement pour les station multiprocesseur• GC « station de travail » autrement
• gcConcurrent • GC simultanée, depuis .NET 4 GC d’arrière plan
<configuration>
<runtime>
<gcServer enabled=« false" />
<gcConcurrent enabled=« true"/>
</runtime> </configuration>
16
Le garbage-collector – Sa Configuration
• gcServer
• Uniquement pour les stations multiprocesseurs
• Optimisé pour le débit
• 1 Thread GC par CPU en THREAD_PRIORITY_HIGHEST
• Si vous disposez de 12 processus qui s'exécutent sur un ordinateur possédant 4 processeurs, il y aura 48 threads de garbage collection dédiés s'ils utilisent tous le garbage collection de serveur
• GC « station de travail » autrement
17
Le garbage-collector – Sa Configuration
• gcConcurrent
• Exécuter la collection en même temps sur un thread dédié
• Uniquement les opérations garbage collection de génération 2• Les générations 0 et 1 sont toujours non simultanées car elles se terminent très
rapidement.
• Uniquement pour « station de travail »
• Depuis .NET 4.5 pour « server/station de travail »
18
Le garbage-collector – Sa Configuration
• gcConcurrent
19
Le garbage-collector – Sa Configuration
• LatencyMode
• Batch• Désactive GCConcurrent et libère des objets dans un appel de lot. • ↗ débit • ↘ réactivité.
Interactive• Active GCConcurrent (mode courant)
LowLatency• Attend d’être sous pression mémoire pour lancer une collection (complet / gen2)• Période limité dans le temps (~opération marché financier)
SustainedLowLatency• Idem LowLatency génération 2 en arrière plan
20
Le garbage-collector
21
Le garbage-collector
• En réalité, il y a deux types de heap:
• Small Object Heap (SOH) (Vu précédemment)
• Large Object Heap (LOH)
• Taille > 85 000 octets
• Fonctionnement différent
22
Le garbage-collector
23
Le garbage-collector
Framework 4.5.1
•RTM depuis 24h avec VS 2013
•RyuJIT
•3ème et nouveau GCSettingsLargeObjectHeapCompactionMode
24
Monitoring
Outils de monitoring
•PerfmonLe plus accessible
•Sos.dllLe plus efficace
•Clr ProfilerLe plus compliqué
•ANTS Memory Profiler 8475 €
25
Monitoring - Perfmon
26
Monitoring – Sos.dll
Pas sur des applications ASP (Limitation)
Immediate Windows: load sos
27
Monitoring – CLR Profiler 1
Télécharger: http://download.microsoft.com/download/4/4/2/442d67c7-a1c1-4884-9715-803a7b485b82/clr%20profiler.exe
Application winform produisant des graphes pour l’analyse.
Entre autre:
• Heap GraphObjets avec leurs connections durant l’execution
Allocation GraphPile d’appel d’allocation d’objet
Histogram By AgeCycle de vie de l’allocation des objets
Histogram Relocated TypesDéplacement des objets dans une autre génération du GC
28
Monitoring – CLR Profiler 2 (size allocation)
29
Monitoring – CLR Profiler 3 (heap graph)
30
Références
• Gestion de la mémoire et garbage collection dans le .NET Frameworkhttp://msdn.microsoft.com/fr-fr/library/vstudio/0xy59wtx.aspx
• Technical Papers chez Red Gateshttp://www.red-gate.com/products/dotnet-development/ants-memory-profiler/technical-papers/
• Commandes sos.dllhttp://msdn.microsoft.com/en-us/library/bb190764.aspx
• En complémenthttps://www.simple-talk.com/dotnet/.net-framework/the-dangers-of-the-large-object-heap/http://blogs.msdn.com/b/mariohewardt/archive/2013/06/26/no-more-memory-fragmentation-on-the-large-object-
heap.aspxhttp://msdn.microsoft.com/fr-fr/magazine/cc163528.aspx
31
Autour de .NET – La Gestion de la mémoire.
Msdn Library : www.talentsoft.com Intel : [email protected]
Référence : http://www.website.com
France • TalentSoft Headquarters35 ter, avenue André Morizet – 92100 Boulogne Billancourt – FranceTél: +33 (0)1 41 86 05 60 • Fax: +33 (0)1 41 86 05 61