Le garbage collector .NEt

Preview:

Citation preview

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 : contact-ts@talentsoft.com

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

Recommended