SlideShare ist ein Scribd-Unternehmen logo
1 von 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
2
Sommaire
• Le framework .NET
La compilation
CLR
• La gestion de la mémoire
Heap
Stack
• Le garbage-collector
Son rôle
Son fonctionnement
Ses configurations
Son 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
Instance2
Class2 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 GCSettings
LargeObjectHeapCompactionMode
24
Monitoring
Outils de monitoring
•Perfmon
Le plus accessible
•Sos.dll
Le plus efficace
•Clr Profiler
Le plus compliqué
•ANTS Memory Profiler 8
475 €
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 Graph
Objets avec leurs connections durant l’execution
Allocation Graph
Pile d’appel d’allocation d’objet
Histogram By Age
Cycle de vie de l’allocation des objets
Histogram Relocated Types
Dé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 Framework
http://msdn.microsoft.com/fr-fr/library/vstudio/0xy59wtx.aspx
• Technical Papers chez Red Gates
http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/technical-papers/
• Commandes sos.dll
http://msdn.microsoft.com/en-us/library/bb190764.aspx
• En complément
https://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.aspx
http://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 Headquarters
35 ter, avenue André Morizet – 92100 Boulogne Billancourt – France
Tél: +33 (0)1 41 86 05 60 • Fax: +33 (0)1 41 86 05 61

Weitere ähnliche Inhalte

Was ist angesagt?

Les secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceLes secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceOCTO Technology
 
Rancher, le (petit) orchestrateur qui vous veut du bien
Rancher, le (petit) orchestrateur qui vous veut du bienRancher, le (petit) orchestrateur qui vous veut du bien
Rancher, le (petit) orchestrateur qui vous veut du bienChristophe Furmaniak
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !ochafik
 
Kubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8sKubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8sArnaud MAZIN
 
Un peu de sel pour être HAPI
Un peu de sel pour être HAPIUn peu de sel pour être HAPI
Un peu de sel pour être HAPICanal+ Dev
 
Git vs SVN
Git vs SVNGit vs SVN
Git vs SVNneuros
 
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Jérôme Petazzoni
 
軽快なPlan9
軽快なPlan9軽快なPlan9
軽快なPlan9Go Saito
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocutionParis_Storm_UG
 
Ingénierie de la performance au sein des mégadonnées
Ingénierie de la performance au sein des mégadonnéesIngénierie de la performance au sein des mégadonnées
Ingénierie de la performance au sein des mégadonnéesDaniel Lemire
 
Docker du mythe à la réalité
Docker du mythe à la réalitéDocker du mythe à la réalité
Docker du mythe à la réalitéZenika
 
Docker & son ecosystème
Docker & son ecosystèmeDocker & son ecosystème
Docker & son ecosystèmeAymen EL Amri
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesChristophe Furmaniak
 
Qt et QML dans AsteroidOS par l'exemple
Qt et QML dans AsteroidOS par l'exempleQt et QML dans AsteroidOS par l'exemple
Qt et QML dans AsteroidOS par l'exempleFlorent Revest
 
Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Saïd Bouras
 
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeDéveloppement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeMustapha Tachouct
 
Utilisation de Qt dans l'embarqué: L'exemple d'AsteroidOS
Utilisation de Qt dans l'embarqué: L'exemple d'AsteroidOSUtilisation de Qt dans l'embarqué: L'exemple d'AsteroidOS
Utilisation de Qt dans l'embarqué: L'exemple d'AsteroidOSFlorent Revest
 

Was ist angesagt? (20)

Les secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceLes secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquence
 
Rancher, le (petit) orchestrateur qui vous veut du bien
Rancher, le (petit) orchestrateur qui vous veut du bienRancher, le (petit) orchestrateur qui vous veut du bien
Rancher, le (petit) orchestrateur qui vous veut du bien
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
 
Kubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8sKubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8s
 
Un peu de sel pour être HAPI
Un peu de sel pour être HAPIUn peu de sel pour être HAPI
Un peu de sel pour être HAPI
 
Git vs SVN
Git vs SVNGit vs SVN
Git vs SVN
 
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
 
軽快なPlan9
軽快なPlan9軽快なPlan9
軽快なPlan9
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocution
 
Ingénierie de la performance au sein des mégadonnées
Ingénierie de la performance au sein des mégadonnéesIngénierie de la performance au sein des mégadonnées
Ingénierie de la performance au sein des mégadonnées
 
Docker du mythe à la réalité
Docker du mythe à la réalitéDocker du mythe à la réalité
Docker du mythe à la réalité
 
Docker & son ecosystème
Docker & son ecosystèmeDocker & son ecosystème
Docker & son ecosystème
 
201505 monitoring
201505 monitoring201505 monitoring
201505 monitoring
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantes
 
Pm2 pres
Pm2 presPm2 pres
Pm2 pres
 
Power Shell V2 Full
Power Shell V2 FullPower Shell V2 Full
Power Shell V2 Full
 
Qt et QML dans AsteroidOS par l'exemple
Qt et QML dans AsteroidOS par l'exempleQt et QML dans AsteroidOS par l'exemple
Qt et QML dans AsteroidOS par l'exemple
 
Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017
 
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquéeDéveloppement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
Développement d'un générateur d'intépréteur de bytecodes pour une JVM embarquée
 
Utilisation de Qt dans l'embarqué: L'exemple d'AsteroidOS
Utilisation de Qt dans l'embarqué: L'exemple d'AsteroidOSUtilisation de Qt dans l'embarqué: L'exemple d'AsteroidOS
Utilisation de Qt dans l'embarqué: L'exemple d'AsteroidOS
 

Andere mochten auch

Premiers pas dans l'univers .NET
Premiers pas dans l'univers .NETPremiers pas dans l'univers .NET
Premiers pas dans l'univers .NETBantu Hub
 
Best Practices You Must Apply to Secure Your APIs - Scott Morrison, SVP & Dis...
Best Practices You Must Apply to Secure Your APIs - Scott Morrison, SVP & Dis...Best Practices You Must Apply to Secure Your APIs - Scott Morrison, SVP & Dis...
Best Practices You Must Apply to Secure Your APIs - Scott Morrison, SVP & Dis...CA API Management
 
Secure Your REST API (The Right Way)
Secure Your REST API (The Right Way)Secure Your REST API (The Right Way)
Secure Your REST API (The Right Way)Stormpath
 
Kevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETKevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETMSDEVMTL
 
The Internet Presentation
The Internet Presentation The Internet Presentation
The Internet Presentation guest9e3d59
 

Andere mochten auch (9)

Premiers pas dans l'univers .NET
Premiers pas dans l'univers .NETPremiers pas dans l'univers .NET
Premiers pas dans l'univers .NET
 
Messaging
MessagingMessaging
Messaging
 
Initiation à ASP.NET 4.0
Initiation à ASP.NET 4.0Initiation à ASP.NET 4.0
Initiation à ASP.NET 4.0
 
.NET Framework
.NET Framework.NET Framework
.NET Framework
 
Best Practices You Must Apply to Secure Your APIs - Scott Morrison, SVP & Dis...
Best Practices You Must Apply to Secure Your APIs - Scott Morrison, SVP & Dis...Best Practices You Must Apply to Secure Your APIs - Scott Morrison, SVP & Dis...
Best Practices You Must Apply to Secure Your APIs - Scott Morrison, SVP & Dis...
 
Secure Your REST API (The Right Way)
Secure Your REST API (The Right Way)Secure Your REST API (The Right Way)
Secure Your REST API (The Right Way)
 
Framework .net overview
Framework .net overviewFramework .net overview
Framework .net overview
 
Kevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETKevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NET
 
The Internet Presentation
The Internet Presentation The Internet Presentation
The Internet Presentation
 

Ähnlich wie Le garbage collector .NEt

Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5Microsoft
 
Principes de fonctionnement unix
Principes de fonctionnement unixPrincipes de fonctionnement unix
Principes de fonctionnement unixwebreaker
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introductionsabrine_hamdi
 
XebiCon'17 : Monitoring et métrologie pour les conteneurs - Jean-Pascal Thie...
XebiCon'17 : Monitoring et métrologie pour les conteneurs - Jean-Pascal Thie...XebiCon'17 : Monitoring et métrologie pour les conteneurs - Jean-Pascal Thie...
XebiCon'17 : Monitoring et métrologie pour les conteneurs - Jean-Pascal Thie...Publicis Sapient Engineering
 
Solutions temps réel sous linux
Solutions temps réel sous linuxSolutions temps réel sous linux
Solutions temps réel sous linuxembedded-linux-bdx
 
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...Duyhai Doan
 
A la découverte de kubernetes
A la découverte de kubernetesA la découverte de kubernetes
A la découverte de kubernetesJulien Maitrehenry
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.jsTelecomValley
 
Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3Luc Juggery
 
Javascript & tools
Javascript & toolsJavascript & tools
Javascript & toolsSlim Soussi
 
Apache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantApache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantALTIC Altic
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...adri1s
 

Ähnlich wie Le garbage collector .NEt (20)

Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5
 
Principes de fonctionnement unix
Principes de fonctionnement unixPrincipes de fonctionnement unix
Principes de fonctionnement unix
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introduction
 
XebiCon'17 : Monitoring et métrologie pour les conteneurs - Jean-Pascal Thie...
XebiCon'17 : Monitoring et métrologie pour les conteneurs - Jean-Pascal Thie...XebiCon'17 : Monitoring et métrologie pour les conteneurs - Jean-Pascal Thie...
XebiCon'17 : Monitoring et métrologie pour les conteneurs - Jean-Pascal Thie...
 
SdE 9 - Threads
SdE 9 - ThreadsSdE 9 - Threads
SdE 9 - Threads
 
Solutions temps réel sous linux
Solutions temps réel sous linuxSolutions temps réel sous linux
Solutions temps réel sous linux
 
Boot
BootBoot
Boot
 
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
 
Formation Google App Engine
Formation Google App EngineFormation Google App Engine
Formation Google App Engine
 
A la découverte de kubernetes
A la découverte de kubernetesA la découverte de kubernetes
A la découverte de kubernetes
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js
 
Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
 
Javascript & tools
Javascript & toolsJavascript & tools
Javascript & tools
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
spark_intro_1208
spark_intro_1208spark_intro_1208
spark_intro_1208
 
Apache kafka big data track
Apache kafka   big data trackApache kafka   big data track
Apache kafka big data track
 
Apache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantApache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performant
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
 
REX Ansible
REX AnsibleREX Ansible
REX Ansible
 

Le garbage collector .NEt

  • 1. 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
  • 2. 2 Sommaire • Le framework .NET La compilation CLR • La gestion de la mémoire Heap Stack • Le garbage-collector Son rôle Son fonctionnement Ses configurations Son avenir • Comment monitorer sa mémoire
  • 3. 3 Le Framework .NET – La compilation
  • 4. 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. 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. 6 Stack B() Class1 instance; La gestion de la mémoire Heap Main A() Instance3 Instance4 Instance2 Class2 instance; int i; struct i; Class3 instance; Instance1
  • 7. 7 La gestion de la mémoire - Stack • Limite: 1Mo par défaut • Exception StackOverflowException  Exemple
  • 8. 8 La gestion de la mémoire - Heap • Limite: 2Go (Limite système) • Exception OutOfMemoryException  Exemple
  • 9. 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. 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. 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. 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. 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. 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. 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. 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. 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. 18 Le garbage-collector – Sa Configuration • gcConcurrent
  • 19. 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
  • 21. 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
  • 23. 23 Le garbage-collector Framework 4.5.1 •RTM depuis 24h avec VS 2013 •RyuJIT •3ème et nouveau GCSettings LargeObjectHeapCompactionMode
  • 24. 24 Monitoring Outils de monitoring •Perfmon Le plus accessible •Sos.dll Le plus efficace •Clr Profiler Le plus compliqué •ANTS Memory Profiler 8 475 €
  • 26. 26 Monitoring – Sos.dll Pas sur des applications ASP (Limitation) Immediate Windows: load sos
  • 27. 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 Graph Objets avec leurs connections durant l’execution Allocation Graph Pile d’appel d’allocation d’objet Histogram By Age Cycle de vie de l’allocation des objets Histogram Relocated Types Déplacement des objets dans une autre génération du GC
  • 28. 28 Monitoring – CLR Profiler 2 (size allocation)
  • 29. 29 Monitoring – CLR Profiler 3 (heap graph)
  • 30. 30 Références • Gestion de la mémoire et garbage collection dans le .NET Framework http://msdn.microsoft.com/fr-fr/library/vstudio/0xy59wtx.aspx • Technical Papers chez Red Gates http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/technical-papers/ • Commandes sos.dll http://msdn.microsoft.com/en-us/library/bb190764.aspx • En complément https://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.aspx http://msdn.microsoft.com/fr-fr/magazine/cc163528.aspx
  • 31. 31 Autour de .NET – La Gestion de la mémoire.
  • 32. Msdn Library : www.talentsoft.com Intel : contact-ts@talentsoft.com Référence : http://www.website.com France • TalentSoft Headquarters 35 ter, avenue André Morizet – 92100 Boulogne Billancourt – France Tél: +33 (0)1 41 86 05 60 • Fax: +33 (0)1 41 86 05 61