Détecter et éviter les fuites de mémoire dans les applications .NET

Slides:



Advertisements
Présentations similaires
Outils de développement pour .NET SharpToolbox 27 juin 2005
Advertisements

Programmation Windows Formation VIA-VideoLAN Lundi 26 février 2001.
Pierre Lagarde Relation technique développeur Grégory Renard [Rédo] Responsable Développement Wygwam.
Découverte de SQL Server par la pratique pour les administrateurs expérimentés Module 3 : Le serveur Patrick Guimonet Architecte Infrastructure Division.
Débogage d'applications ASP .NET en production
1 HPC pour les opérations. Sommaire Quelques rappels sur Windows Compute Cluster Server Déploiement de Compute Cluster Administration de Compute cluster.
Windows Presentation Foundation Mitsu Furuta DevDays 2006 Equipé aujourdhui, prêt pour demain.
Rencontres Windows Forms
UNIVERSITE DE TECHNOLOGIE COMPIEGNE GE 15 - SUITE LA RECHERCHE DOCUMENTAIRE SUR LE NET Béatrice KONIG – BUTC Tél. :
L’intégration continue
L’architecture .net et ASP.net
Objectifs: Il faut Savoir Représenter la façon dont les informations sont enregistrées sur un disque ; Choisir convenablement les noms et extensions pour.
Les outils d’intégration continue
Page 1Dernière mise à jour: 3 mai 2014 Service de l'enseignement des technologies de l'information, © HEC Montréal, Tous droits réservés. Leçon.
Nouveau blog. WordPress connexion Nommez votre blog.
Eric Vernié - Microsoft Yann Faure - Bewise Etude de cas FMStocks 2000.
Trucs et Astuces { Visual Studio 2008 – VB 9 (C#3)} Grégory Renard CTO – R&I Manager Wygwam Microsoft Regional Director / Microsoft MVP
Introduction à Entity Framework
Chef de projet : Paul ROOSENS Membre du projet : Vadim PIVAK
« Les Mercredis du développement » Retour dexpérience / Framework de dév. Présenté par Grégory Renard [Rédo] Responsable Développement.
Direction Informatique & Système d’Information
Microsoft dot Net Extrait du cours. La programmation fenêtrée facile. Une approche objet. Philippe Garraud: Formateur indépendant.
Techniques de test Boulanger Jean-Louis.
2 Javascript dans tous ses états Bruno MichelYann Schwartz AF83Polom
Formulaires dynamiques et workflows évolués
Chef de projet : Paul Roosens Membre du projet : Vadim PIVAK
Présentation du mémoire
Microsoft .NET.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 1 : Introduction.
Cilia Mediation Framework v0.9.0 Implantation.. Plan Cilia: c'est quoi? Capacités. Cilia: Modèle d'implantation. Mise en œuvre: Médiateur Cilia. Assemblage.
PhP-MySQL Pagora 2012/2013 CTD 1 - Presentation de moi ^^
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure dInformatique (ESI) Plate-forme.NET.
22 Web Platform Installer pour faciliter la mise en œuvre de votre plateforme Web 9 Février 2010 Alban OlierLaurent Bonnet
L’incontournable des logiciels Microsoft pour l’enseignement :
La plateforme.NET 2.0 vue par le développeur Pascal Belaud Microsoft France SAGA.NET
J2EE vs .NET Réaliser par : SEIF ENNACER BADRA && CHETOUI RIM.
1 journée, 5 sessions, 1 réalisation.NET Enterprise Realization Day.
Patrons de conceptions de créations
NET LINQ, ADO Vnext, Orcas,… Pierre COUZY Stéphane GOUDEAU Architecte en Système d’information Division Plateformes et Ecosystème Microsoft France.
‘‘Open Data base Connectivity‘‘
Travail réalisé par : LATRECHE Imed Eddine MENASRIA Med Lamine
Module I-C3 : Applications Web IUT R&T 2e année
Programmation Système et Réseau (sous Linux)
Module 8 : Surveillance des performances de SQL Server
Créez des applications Silverlight 3 David Rousset Relations Techniques avec les développeurs Microsoft France
11 TFS Basic Premiers pas dans l’industrialisation! Florent Santin Le technique Access it Blaise Vignon Le marketeux Microsoft.
ENGIMA.
.NET Plateforme, framework, produits Bernard Fedotoff (Pdg) Stéphane Vancauwenberghe (Consultant)
Introduction à la plateforme .NET
2 Le futur de VB et l’asynchronisme [LAN101] 08/02 14h30 Patrice Lamarche GPI
Outil de conception d’applications WPF Anciennement « Interactive Designer » Orienté « intégrateur graphistes » Particularité : Blend tm est une application.
Dyalog.Net Peter Donnelly Managing Director Dyadic Systems Toronto 30/10/2002.
RDA 209 : WPF Toolkit et bonnes pratiques
S'initier au HTML et aux feuilles de style CSS Cours 5.
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
Projet débuté en décembre 1989 Première version publique en février 1991 Lancement du site python.org en 1997 Python Software Foundation en 2001 Version.
Créez des applications Silverlight 3 David Rousset Relations Techniques avec les développeurs Microsoft France
Techniques documentaires et veille stratégique Anne Pajard, avril 2008
2 TFS Basic, en route vers L’ALM 08/02/2011 Alain MartyBenoit Laut ConsultantMVP ALM BewiseBewise.
Découverte des notions fondamentales du respect des normes du Web Découverte de l’implémentation des normes et standards au sein de Visual Studio Comment.
CMS - SGC Revenu Québec. Octobre 2003 SSWII - SERVICE DES SOLUTIONS WEB ET DE L’INGÉNIERIE DE L’INFORMATION DSAE - DIRECTION DES SOLUTIONS D’AFFAIRES.
S'initier au HTML et aux feuilles de style CSS Cours 5.
1 Visual Studio 2005 Tools For Office: Présentation et Démonstrations.
22 Fun with Fuzzing : les outils SDL SEC306 Eric Vernié Division Plateforme et Ecosystème Microsoft France Eric Mittelette Division.
WinAC ODK Win AC ODK Open Developer Kit Open Developer Kit.
Les outils Multidimensionnels SAS ® 9 Atelier Technique SAS ® Eric WOLFF Jeudi 2 juin 2005.
2 Alain METGE SOGETI
1.1: notions de bases de l’informatique
Réflexion sur un exemple possible de projet proposé en I.S.N.
Introduction O.Legrand G. Seront. Open Handset Alliance Project Regroupement d'entreprises : –de télécommunications, –de constructeurs d’appareils mobiles,
Transcription de la présentation:

Détecter et éviter les fuites de mémoire dans les applications .NET Fabrice MARGUERIE Architecte .NET metaSapiens Yann SCHWARTZ Architecte .NET Polom 1 min date

Au programme Les principes Détecter et corriger Prévenir plutôt que guérir Indiquer qu’on se base sur des retours d’expérience date

Au programme Les principes Détecter et corriger Prévenir plutôt que guérir

La mémoire en .NET La mémoire du processus La pile, le tas Le Garbage Collector Ce qui retient les instances Références statiques GCHandles Références des piles (une pile par thread) Finalization queue 3 min date

Fuites de mémoire Définition En informatique, une fuite de mémoire est un type particulier de consommation non intentionnelle de mémoire par un programme qui ne libère pas comme il le devrait la mémoire dont il n'a plus besoin. Les causes les plus classiques d'une telle situation sont : un oubli un bug une méconnaissance 4 min date

Fuites de mémoire Les langages qui présentent une gestion automatisée de la mémoire, tels Java, C#, VB.NET ou LISP, ne sont pas immunisés contre les fuites de mémoire. Le garbage collector récupère uniquement la mémoire qui n'est plus accessible. Il ne libère pas la mémoire tant qu'elle reste accessible. En .NET, cela signifie que des objets accessibles par au moins une référence ne seront par relâchés par le garbage collector. Rappeler la différence entre managé et non-managé : en C, C++ classique, Delphi classique, etc., on doit libérer soi-même la mémoire avec des appels à free, Free, delete, ou autre en .NET la libération est automatique. Rappeler que ça ne veut pas dire qu'on ne doit se soucier de rien. On est en managé, mais on peut maintenir facilement en vie bcp de mémoire. On référence aussi des ressources non-managées - connexions à des bases de données, objets graphiques, et autres objets systèmes. Transition vers la suite en disant qu'en .NET il y a des pièges (événements, etc.) qu'on va détailler dans le reste de la session. date

Fuites de mémoire Une goutte d'eau n'est pas un gros problème. Mais goutte par goutte, une fuite peut devenir un problème majeur. En informatique, même une petite fuite peut mettre le système à genoux si elle se produit plusieurs fois. date

Au programme Les principes Détecter et corriger Prévenir plutôt que guérir

Les étapes de la traque 1. Détecter la fuite 2. Trouver la ressource qui fuit 3. Décider où et quand la libérer la ressource dans le code 1 min date

Fabuleuse application PhotoLight Démo Fabuleuse application PhotoLight 8 min (PhotoLight + TaskManager + PerfMon) date

Photo…Light ?

Les outils pour agir Trois approches complémentaires Vue haut niveau, audit général : dotTrace Plus en détail : .NET Memory Profiler Pour les explorateurs : WinDbg 4 min La recherche de fuites mémoire n'est pas forcément chose compliquée. Il existe différents outils pour différents cas de figure et utilisateurs : - Pour une vue haut niveau, un audit général : dotTrace Pour creuser la question et analyser d'éventuels problème (mais nécessitant une connaissance plus poussée du modèle mémoire de la CLR) : .NET Memory Profiler Pour une approche exploratoire, et pour ceux habitués aux outils bas niveau : windbg date

VMMap date

dotTrace 9 min date

dotTrace date

dotTrace date

Problème identifié Evénement statique PhotoLight.exe MainForm DetailsForm OptionsForm SystemEvents.InstalledFontsChanged date

.NET Memory Profiler 8 min date

.NET Memory Profiler

Problème identifié Désabonnement manquant PhotoLight.exe MainForm OpacityChanged DetailsForm OptionsForm date

WinDbg Debugger natif/managed et « graphique » Installation minimale Permet de s’attacher à un processus ou d’explorer un dump mémoire Idéal pour se plonger dans les entrailles d’un processus 10 min date

Extensions WinDbg Sos.dll permet d’examiner la mémoire managed !DumpHeap liste des instances du tas !DumpObject !GCRoot trouve l’instance racine d’une instance

WinDbg Montrer fenêtre Modules en debug sous VS ? date

Problème identifié Code généré à la volée PhotoLight.exe MainForm Assemblage XmlSerializer Assemblage XmlSerializer Settings Manager DetailsForm OptionsForm date

Problèmes identifiés Dispose pas appelée Code généré à la volée PhotoLight.exe MainForm Assemblage XmlSerializer Assemblage XmlSerializer Settings Manager DetailsForm Context Menu SystemEvents.UserPreferenceChanged date

Au programme Les principes Détecter et corriger Prévenir plutôt que guérir

Causes courantes Références statiques 3 min date

Causes courantes Evénements statiques Evénements sans désabonnement

Causes courantes Dispose pas appelé Traitement réalisé dans Dispose incomplet

Il y a de quoi varier les plaisirs… Code compilé à la volée Spécifiques aux technologies (Silverlight, WPF, applications composites, etc.)

Prévenir plutôt que guérir Contrôler la possession des objets Analyse statique (NDepend, …) Mais avant tout une bonne connaissance de son code Chaque += (ou AddHandler) est un ennemi en puissance ! -= ! using et Dispose WeakEvents EventBroker Ou tout simplement relancer l’appli… 5 min date

Prévenir plutôt que guérir On n’est pas à l’abri d’un oubli Ecran de monitoring intégré

Outils Outils dédiés au profilage en .NET dotTrace, .NET Memory Profiler, ANTS Profiler, YourKit Profiler, PurifyPlus, Aqtime, CLR Profiler, … http://sharptoolbox.com/categories/profilers-debuggers WinDbg, SOS.dll, linqdbg http://www.microsoft.com/whdc/devtools/debugging/ http://code.google.com/p/linqdbg/ VMMap http://sysinternals.com Bear, GDI Usage http://thesz.diecru.eu/content/bear.php http://msdn.microsoft.com/en-us/magazine/cc301756.aspx 1 min date

Ressources Article Détecter et éviter les fuites de mémoire et de ressources dans les applications .NET En français sur DotNetGuru http://dotnetguru.org/modules.php?file=article&sid=1283 En anglais sur MSDN http://msdn.microsoft.com/en-us/library/ee658248.aspx Livre Advanced .NET Debugging Mario Hewardt, également auteur de Advanced Windows Debugging Livre Debugging Microsoft .NET 2.0 Applications John Robbins

Ressources Blog de Tess Ferrandez, ASP.NET Escalation Engineer chez Microsoft http://blogs.msdn.com/tess/archive/tags/Memory+issues/default.aspx Détection de fuites de handler d’événements avec WinDbg http://is.gd/79Qlk (blog de David Anson, MS) Autres liens à la fin de l’article

Contacts Architecture et expertise .NET fabrice@metasapiens.com http://weblogs.asp.net/fmarguerie yann@polom.com @abolibibelot http://blog.polom.com

Compléments

Bear et GDIUsage