Le garbage collector .NEt

32
www.talentsoft.com IDENTIFIER ÉVALUER DÉVELOPPER PLANIFIER Auteur(s)/Intervenant(s) : Date : Autour du Framework .NET La gestion de la mémoire Olivier MARTINET octobre2013

Transcript of Le garbage collector .NEt

Page 1: 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

Page 2: Le garbage collector .NEt

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

Page 3: Le garbage collector .NEt

3

Le Framework .NET – La compilation

Page 4: Le garbage collector .NEt

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

Page 5: Le garbage collector .NEt

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é)

Page 6: Le garbage collector .NEt

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

Page 7: Le garbage collector .NEt

7

La gestion de la mémoire - Stack

• Limite: 1Mo par défaut

• Exception StackOverflowException

Exemple

Page 8: Le garbage collector .NEt

8

La gestion de la mémoire - Heap

• Limite: 2Go (Limite système)

• Exception OutOfMemoryException

Exemple

Page 9: Le garbage collector .NEt

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.

Page 10: Le garbage collector .NEt

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.

Page 11: Le garbage collector .NEt

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.

Page 12: Le garbage collector .NEt

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.

Page 13: Le garbage collector .NEt

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

Page 14: Le garbage collector .NEt

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

Page 15: Le garbage collector .NEt

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>

Page 16: Le garbage collector .NEt

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

Page 17: Le garbage collector .NEt

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 »

Page 18: Le garbage collector .NEt

18

Le garbage-collector – Sa Configuration

• gcConcurrent

Page 19: Le garbage collector .NEt

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

Page 20: Le garbage collector .NEt

20

Le garbage-collector

Page 21: Le garbage collector .NEt

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

Page 22: Le garbage collector .NEt

22

Le garbage-collector

Page 23: Le garbage collector .NEt

23

Le garbage-collector

Framework 4.5.1

•RTM depuis 24h avec VS 2013

•RyuJIT

•3ème et nouveau GCSettingsLargeObjectHeapCompactionMode

Page 24: Le garbage collector .NEt

24

Monitoring

Outils de monitoring

•PerfmonLe plus accessible

•Sos.dllLe plus efficace

•Clr ProfilerLe plus compliqué

•ANTS Memory Profiler 8475 €

Page 25: Le garbage collector .NEt

25

Monitoring - Perfmon

Page 26: Le garbage collector .NEt

26

Monitoring – Sos.dll

Pas sur des applications ASP (Limitation)

Immediate Windows: load sos

Page 27: Le garbage collector .NEt

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

Page 28: Le garbage collector .NEt

28

Monitoring – CLR Profiler 2 (size allocation)

Page 29: Le garbage collector .NEt

29

Monitoring – CLR Profiler 3 (heap graph)

Page 30: Le garbage collector .NEt

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

Page 31: Le garbage collector .NEt

31

Autour de .NET – La Gestion de la mémoire.

Page 32: Le garbage collector .NEt

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