Comment identifier les fuites de mémoire (2023)

Vous ne connaissez peut-être pas la réflexion sur l'utilisation de la mémoire de vos applications en tant que développeur de logiciels.La mémoire est abondante et généralement relativement rapide dans le monde du développement d'aujourd'hui.Probablement, le langage de programmation que vous utilisez ne vous oblige pas à allouer ou à gratuitement de la mémoire.Cependant, cela ne signifie pas que vous êtes à l'abri des fuites de mémoire.

Des fuites de mémoire peuvent se produire dans n'importe quelle application écrite dans n'importe quelle langue.Bien sûr, les langues plus anciennes ou "près du métal" comme C ou C ++ en ont plus.Cependant, il ne faut qu'une seule visite à une page Web mal optimisée pour réaliser que même une langue comme JavaScript peut souffrir de fuites de mémoire.

Dans cet article, nous expliquerons les fuites de mémoire, les conséquences, comment trouver des fuites de mémoire, des moyens de les empêcher, et plus encore.

Nous passerons en revue ce qui suit:

  1. Qu'est-ce que la fuite de mémoire?
  2. Fuites de mémoire dans l'entreprise: quelles sont les conséquences?
  3. Existe-t-il un moyen de dire une fuite de mémoire?
  4. Comment empêcher les fuites de mémoire?
  5. Effets des fuites de mémoire
  6. Utilisation du moniteur de ressources dans Windows
  7. Limites du moniteur de ressources de Window

Qu'est-ce que la fuite de mémoire?

Une fuite de mémoire se produit lorsqu'un programmeur produit de grandes quantités de mémoire mais ne parvient à rien en libérer.Lorsque nous parlons de mémoire, nous faisons référence àMémoire d'accès aléatoire (RAM)plutôt qu'un stockage à long terme.Si une application exige plus de mémoire sans en libérer, le pool de mémoire du serveur sera drainé au fil du temps.En conséquence, l'application peut s'écraser si elle utilise plus de mémoire à l'avenir.

Cependant, même si vous avez suffisamment de RAM et que vous n'exécutez pas de logiciels à forte intensité de ressources, il peut y avoir des moments où tout votre RAM est utilisé et que les performances souffrent.Ceci est appelé fuite de mémoire, et il se produit lorsque le logiciel ne gérait pas correctement la RAM disponible.

Lorsque l'ordinateur est en fonctionnement régulier, le logiciel utilise dynamiquement RAM et les ressources de mémoire sont allouées selon les besoins.Lorsqu'un logiciel n'a plus besoin de RAM, il est renvoyé afin qu'il puisse être réaffecté à l'application suivante lorsqu'elle est nécessaire.Lorsqu'il y a une fuite de mémoire, la RAM est attribuée au logiciel mais non libérée lorsqu'elle n'est plus nécessaire.

Les fuites de mémoire étaient courantes dans le passé lorsque les développeurs ont principalement utilisé C et C ++.La raison en est que les développeurs ont dû libérer manuellement la mémoire de l'application après chaque utilisation.Pour les développeurs qui avaient d'autres tâches plus importantes à hiérarchiser, c'était une habitude stressante.

Au fil de l'application, plus de mémoire est consommée et les anciennes données s'accumulent dans les registres.Le logiciel s'arrête finalement et la mémoire est délibérément libérée.Cependant, il y a des situations où le programme cessera de fonctionner parce que leapplications'est écrasé.

Heureusement, les langages de programmation fournissent des installations qui peuvent automatiquement supprimer la mémoire inutilisée, résolvant ce problème.Le collecteur des ordures, ou GC, en fait partie.Le collecteur des ordures ne peut faire autant en termes de libération de données inutilisées.Les fuites de mémoire sont causées par des objets non référencés passant par le collecteur intact.

Fuites de mémoire dans l'entreprise: quelles sont les conséquences?

Les fuites de mémoire peuvent avoir un impact grave sur votre entreprise.Les fuites sont moins visibles que les défauts de programme typiques.Considérez cela comme un assassin silencieux pour votre demande.Il fait son chemin à travers le système, détruisant progressivement l'application.

How to Identify Memory Leaks (1)

L'incident chez Amazon en 2012, qui a impliqué une procédure de maintenance qui a mal tourné, est un exemple clair de la façon dont une fuite de mémoire peut avoir un impact significatif sur une société.Amazon a choisi de mettre à jour son serveur de collecte de données, mais les configurations de certaines machines étaient incorrectes, ce qui a entraîné des fuites de mémoire.La fuite est devenue incontrôlable et le service affligé a été arrêté, affectant des millions d'utilisateurs.

  • Disponibilité et fiabilité
    Les fuites de mémoire peuvent avoir un impact significatif sur la disponibilité et la fiabilité d'une application car elles ralentissent les performances de l'application.
  • Dérioration des performances
    Les fuites de mémoire n'affectent pas le comportement de votre logiciel.Cependant, en raison de l'épuisement de la mémoire du système, les fuites répétées s'ajoutent à la baisse des performances de l'application.N'oubliez pas que l'expérience utilisateur est essentielle au succès de votre entreprise.Si votre application a une mauvaise expérience utilisateur, il est voué à l'échec.

Existe-t-il un moyen de dire une fuite de mémoire?

La manquer de mémoire est le moyen le plus simple d'identifier une fuite de mémoire, et c'est aussi l'approche la plus courante pour en découvrir une.C'est aussi le moyen le plus gênant de trouver une fuite.

How to Identify Memory Leaks (2)

Vous remarquerez probablement que votre système ralentit avant de manquer de RAM et de écraser votre application.Si tel est le cas, il est temps de commencer à passer par votre code pour voir ce qui mange tout votre RAM.

Vous y réaliserai très probablement avec l'aide d'unoutil de profilage.Les IDE modernes, comme Visual Studio, ont des capacités qui vous montrent la quantité de mémoire utilisée par des composants particuliers de votre application.

Un outil de profilage n'est pas une solution: il ne vous dira pas quels domaines de votre logiciel fuient immédiatement la mémoire.Il vous informera des domaines de votre application qui utilisent le plus de mémoire.

Vous pouvez également surveiller les parties de l'application utiliser plus de mémoire au fil du temps si vous les exécutez pendant longtemps.Avec ces informations, vous pouvez concentrer votre recherche sur le code qui fuit dans votre application.

Une autre façon de détecter les fuites de mémoire est d'employerjournalisation intelligente.Une fuite de mémoire est parfois causée par un code incorrect, mais il est souvent causé par vos utilisateurs.Peut-être qu'un utilisateur a téléchargé un énorme fichier sur vos serveurs et tente d'y accéder.

Si vous mettez le fichier entier en mémoire, vous pouvez épuiser accidentellement le RAM de l'application.Les fuites de mémoire dans les applications en cours d'exécution sont fréquemment détectées par des outils automatisés dans des sociétés de logiciels matures.

Pour vérifier vos codes, vous aurez besoin d'une application tierce commeAtatus.Avec journalisation centralisée,profilage de code, suivi des erreurs et surveillance des utilisateurs en temps réel, ce produit va au-delàGestion du performance des applications (APM).

How to Identify Memory Leaks (3)

Vous pouvez appliquer un statut à votre système de codage si vous voyez que votre application est à la traîne.Il vous dira quel code va dans la mauvaise direction ou quel code mange beaucoup de mémoire.

Oui, ce n'est pas une approche simple pour localiser la fuite de mémoire.C'est néanmoins un pas en avant significatif.Les informations que vous collectez peuvent vous aider à réduire votre recherche de la source de la fuite.

Comment empêcher les fuites de mémoire?

Comme indiqué précédemment, plusieurs langages de programmation populaires intègrent désormais des outils pour aider les développeurs à gestion de la mémoire autonome.Ils utilisent un système de collecteur de ordures pour libérer de la mémoire que l'application ne nécessite pas.

Les collectionneurs à ordures sont des logiciels complexes.Si vous souhaitez éviter un large éventail de fuites de mémoire, vous devez vous familiariser avec les méthodes de collecte des ordures de votre langue.Les collectionneurs à ordures sont disponibles en quelques types différents.Comprendre comment fonctionne la collecte des ordures dans votre application pour éviter les fuites de mémoire.

L'écriture de code qui élimine les ressources inutilisées est une autre méthode clé pour éviter les fuites de mémoire.Presque toutes les langues ont des types de ressources qui ne sont pas libérés par défaut.FileHandles et les connexions de ressources en réseau sont des exemples.Vous devez créer un code particulier pour informer l'application que le travail de la ressource est terminé.

Vous pouvez utiliser la méthode de force brute pour éliminer les fuites de mémoire dans les cas les plus extrêmes: redémarrer le processus.

How to Identify Memory Leaks (4)

Cependant, vous ne devez l'utiliser que comme correctif temporaire.

C'est comme un médecin enlevant chirurgicalement votre bras parce que vous avez brisé le pouce avec un marteau.En étant plus prudent, vous pouvez éviter la source du problème et éviter la nécessité de ces étapes difficiles.

Effets des fuites de mémoire

Il n'y aura normalement pas de symptôme immédiat si un programme a une fuite de mémoire et que son utilisation de la mémoire augmente progressivement.Chaque système physique a une quantité limitée de mémoire, et si une fuite de mémoire n'est pas abordée(par exemple, en redémarrant le programme de fuite), cela entraînera éventuellement des problèmes.

La mémoire principale, qui est physiquement tenue dans les micropuces de RAM, et le stockage secondaire, comme un disque dur, sont tous deux présents dans la plupart des systèmes d'exploitation de bureau grand public.La mémoire est allouée sur une base par processus, chaque processus recevant la quantité de mémoire qu'il demande.Les pages actives sont déplacées vers la mémoire principale pour un accès rapide, tandis que les pages inactives sont déplacées vers le stockage secondaire pour économiser de l'espace.

Lorsqu'un seul processus consomme une grande quantité de mémoire, il a tendance à prendre de plus en plus de mémoire principale, forçant d'autres programmes au stockage secondaire et ralentissant considérablement les performances du système.Même si le programme de fuite est terminé, d'autres programmes peuvent avoir besoin de temps pour revenir dans la mémoire principale et les performances peuvent prendre un certain temps pour se remettre à la normale.

Toute tentative d'attribution de mémoire supplémentaire sur un système lorsque toute la mémoire du système est épuisée échouera.Le programme qui tente d'allouer la mémoire terminera ou générera normalement un défaut de segmentation à la suite de cela.Certains programmes sont destinés à aider les gens à se remettre sur pied après avoir été dans cette situation.

Le système d'exploitation échouera très probablement si la fuite de mémoire est dans le noyau.Une fuite de mémoire persistante peut également provoquer des ordinateurs avec une gestion de la mémoire moins sophistiquée, comme les systèmes intégrés, à échouer.

Si un attaquant identifie une séquence d'actions qui peuvent provoquer une fuite, des systèmes accessibles au public tels que les serveurs Web ou les routeurs sont vulnérables au déni de service (la cyber-sécurité) Attaques.Un exploit est un terme pour une séquence comme celle-ci.

Utilisation du moniteur de ressources dans Windows

Pour trouver une fuite de mémoire, regardez la quantité de RAM le système utilise.Le moniteur de ressources dans Windows peut être utilisé pour y parvenir.

Dans Windows 7, vous pouvez:

Démarrer >> Tous les programmes >> Accessoires >> Outils système >> Moniteur de ressources

Dans Windows 8.1 et Windows 10:

Pour ouvrir le dialogue d'exécution, appuyez sur Windows + R, puis tapez "resmon"Et cliquez sur OK.

Sélectionnez l'onglet Mémoire dans le moniteur de ressources une fois qu'il est ouvert.

Pour vous assurer qu'il n'y a pas de problème matériel, vérifiez que la quantité correcte de mémoire physique est signalée comme installé.Examinez la quantité de mémoire accessible ainsi que la quantité d'utilisation.Cela révèlera si le système est à court de RAM ou en a beaucoup.

How to Identify Memory Leaks (5)

Après cela, nous examinerons les processus qui utilisent maintenant la mémoire.Plutôt que de lire la liste entière, sélectionnez "commit (kb)", qui le réorganisera afin que les activités qui utilisent le plus de mémoire soient en haut.

Il est simple d'identifier les applications consommer le plus de RAM.C'est "chrome.exe"Dans l'exemple ci-dessus, qui est le navigateur Google Chrome. Notez également que 85% de la mémoire physique a été utilisée en haut des processus, montrant moins de réserves de mémoire pour des processus supplémentaires.

How to Identify Memory Leaks (6)

Les trois moniteurs au fil du temps, qui montrent les 60 dernières secondes, sont affichés sur le côté droit de l'écran.La "mémoire physique utilisée" dans le panneau supérieur augmente quelque peu avec le temps, mais il reste une petite partie de la mémoire, permettant au système de rester stable.

Limites du moniteur de ressources de Window

Cela vaut la peine de garder un œil sur le moniteur de ressources de la fenêtre, car il peut vous montrer la quantité de RAM disponible et quels processus utilisent le plus de ressources.

How to Identify Memory Leaks (7)

Cependant, il présente de nombreux inconvénients sérieux.

Le premier est qu'il n'est pas surveillé régulièrement.Il nécessite que vous ouvrez le moniteur de ressources et ne fonctionne pas en arrière-plan.Les gadgets Windows, qui ont fait leurs débuts dans Windows Vista et se poursuivaient dans Windows 7, comprenaient un gadget qui a accompli cela.

Il s'est avéré que ces appareils étaient vulnérables (comme la plupart des logiciels), donc Microsoft les a abandonnés et ils ne sont plus accessibles.Bien que nous ne nous attendions pas à la pince pour Vista, c'était une caractéristique très utile qui a été supprimée beaucoup trop rapidement.

Une autre limitation est qu'il ne peut revenir en arrière que 60 secondes.Si une fuite de mémoire se produit et que le logiciel est fermé, il est peu probable qu'il soit détecté et identifié de manière appropriée comme la source du problème.

Conclusion

Les fuites de mémoire sont courantes dans le code d'application car la personne qui les écrivait n'est pas consciente des risques.Cela peut rendre plus difficile les localiser.Il est assez difficile de comprendre d'où vient la fuite parce que le développeur qui comprend le mieux le code ne sait pas ce qui le cause.

Si vous découvrez une fuite de mémoire dans votre code, ne le considérez pas comme un échec du logiciel.Au lieu de cela, utilisez-le comme une opportunité d'améliorer vos compétences et de grandir en équipe.En appliquant les techniques dont nous avons discuté ici, vous découvrirez que vous écrivez naturellement du code qui protège vos applications des fuites de mémoire lorsque vous avancez dans vos talents.

Surveillez l'intégralité de votre application avecAtatus

ATatus est une plate-forme d'observabilité complète qui vous permet de revoir les problèmes comme s'ils se sont produits dans votre application.Au lieu de deviner pourquoi les erreurs se produisent ou de demander aux utilisateurs des captures d'écran et des vidages de journal, Aatus vous permet de rejouer la session pour comprendre rapidement ce qui n'a pas fonctionné.

Nous offrons une surveillance des performances des applications, une surveillance réelle des utilisateurs, une surveillance des serveurs, une surveillance des journaux, une surveillance synthétique, une surveillance de la disponibilité et l'analyse des API.Il fonctionne parfaitement avec n'importe quelle application, quel que soit le cadre, et dispose de plugins.

How to Identify Memory Leaks (8)

ATatus peut être bénéfique pour votre entreprise, ce qui fournit une vue complète de votre application, y compris son fonctionnement, où les goulots d'étranglement des performances existent, quels utilisateurs sont les plus touchés et quelles erreurs brisent votre code pour votre frontend, votre backend et votre infrastructure.

Si vous n'êtes pas encore client ATatus, vous pouvezInscrivez-vous à un essai gratuit de 14 jours.

References

Top Articles
Latest Posts
Article information

Author: Gov. Deandrea McKenzie

Last Updated: 17/12/2023

Views: 6492

Rating: 4.6 / 5 (46 voted)

Reviews: 93% of readers found this page helpful

Author information

Name: Gov. Deandrea McKenzie

Birthday: 2001-01-17

Address: Suite 769 2454 Marsha Coves, Debbieton, MS 95002

Phone: +813077629322

Job: Real-Estate Executive

Hobby: Archery, Metal detecting, Kitesurfing, Genealogy, Kitesurfing, Calligraphy, Roller skating

Introduction: My name is Gov. Deandrea McKenzie, I am a spotless, clean, glamorous, sparkling, adventurous, nice, brainy person who loves writing and wants to share my knowledge and understanding with you.