2013-11-12 01:10:06 +0000 2013-11-12 01:10:06 +0000
75
75

Windows utilisant trop de mémoire vive, comment diagnostiquer le manque de ressources

J'ai 16 Go de RAM système. Au démarrage, aucune application n'est ouverte, sauf le gestionnaire de tâches Windows qui utilise environ 3 Go de RAM. J'ai regardé dans l'onglet processus, mais rien ne semble sortir de l'ordinaire. Comment puis-je savoir pourquoi mon Windows utilise autant de mémoire vive.

tous les processus de tous les utilisateurs


En lisant le poolmon, il semble que mon pilote broadcom sans fil utilise environ 0,4 Go de RAM. Même si je le supprime, il utiliserait encore 2,6 Go au démarrage, ce qui est encore trop.


Après avoir réinstallé le pilote sans fil associé à la fuite de mémoire. J'ai une nouvelle capture d'écran et je voudrais confirmer qu'il s'agit bien d'une fuite de mémoire.

Réponses (4)

85
85
85
2013-11-12 04:54:18 +0000

Vous avez une fuite de mémoire causée par un conducteur. Regardez la valeur élevée de la mémoire du noyau non paginée. Dans votre cas, elle est supérieure à 3,7 Go. Vous pouvez utiliser poolmon pour voir quel pilote est à l'origine de cette forte utilisation.

Installez le Windows WDK , lancez poolmon, triez-le par P après le type de pool de sorte que le non paginé soit en haut et par B après les octets pour voir la balise qui utilise le plus de mémoire. Exécutez poolmon en allant dans le dossier où le WDK est installé, allez dans Outils (ou C:\Program Files (x86)\Windows Kits\10\Tools\x64) et cliquez sur poolmon.exe.

Regardez maintenant quel pooltag utilise le plus de mémoire comme indiqué ici :

Maintenant, ouvrez une invite cmd et lancez la commande findstr. Pour ce faire, ouvrez l'invite cmd et tapez “cd C:\Windows\System32\drivers”, sans les guillemets. Tapez ensuite “findstr /s __ .”, où __ est le tag (nom le plus à gauche dans poolmon). Faites ceci pour voir quel pilote utilise cette balise :

Maintenant, allez dans le dossier des pilotes (C:\Windows\System32\drivers) et cliquez avec le bouton droit de la souris sur le pilote en question (intmsd.sys dans l'exemple d'image ci-dessus). Cliquez sur Propriétés, allez dans l'onglet Détails pour trouver le nom du produit. Recherchez une mise à jour pour ce produit.

Si le pooltag n'affiche que les pilotes Windows ou est répertorié dans le pooltag.txt ("C:\Program Files (x86)\Windows Kits.1\Debuggers\x64\triage\pooltag.txt")

vous avez utilisé xperf pour tracer ce qui provoque l'utilisation . Installez le WPT du SDK Windows , ouvrez un cmd.exe en tant qu'administrateur et exécutez le :

xperf -on PROC_THREAD+LOADER+POOL -stackwalk PoolAlloc+PoolFree+PoolAllocSession+PoolFreeSession -BufferSize 2048 -MaxFile 1024 -FileMode Circulaire && timeout -1 && xperf -d C:\pool.etl

capture 30 -60s de la croissance. Ouvrez l'ETL avec WPA.exe, ajoutez les graphiques du pool dans le volet d'analyse.

placez la colonne pooltag à la première place et ajoutez la colonne stack. Maintenant chargez les symboles dans WPA.exe et développez la pile du tag que vous avez vu dans poolmon.

Maintenant, trouvez d'autres pilotes tiers que vous pouvez voir dans la pile. Ici, le tag Thre (Thread) est utilisé par AVKCl.exe de G-Data. Recherchez les mises à jour des pilotes/programmes pour le corriger.

15
15
15
2013-11-12 05:41:48 +0000

Eh bien, première chose, avant d'entrer dans une réponse plus détaillée. Dans votre première capture d'écran, votre pool non paginé (un type d'utilisation de la mémoire du noyau) est à 1,3 Go. Cela me semble inhabituellement élevé, surtout pendant les 30 minutes qui suivent le démarrage. Je suppose que je pouvais voir le NP Pool atteindre ce niveau après une utilisation prolongée ou avec un programme qui fuyait comme une passoire. En revanche, mon NP Pool se situe généralement entre 100 et 200 mégaoctets, et mon pool de pagination peut atteindre 400 ou 500 (et ce après avoir fait tourner mon système sans redémarrage pendant des semaines.)


Vous pouvez activer quelques colonnes supplémentaires dans le gestionnaire des tâches en cliquant avec le bouton droit sur les en-têtes de colonne, et en choisissant “Sélectionner les colonnes”. Vous devez ajouter Working Set (private), Working Set (shared), Commit, et NP Pool. Je parcourrais tous vos processus de tous les utilisateurs, et verrais si certains d'entre eux ont un pool de NP de plus de 256KB environ. Si vous en voyez, en particulier ceux qui sont considérablement plus élevés, cela pourrait être la source du problème, ou du moins une partie de celui-ci.

Votre ensemble de travail total, la quantité de mémoire physique utilisée par un processus, est la combinaison des ensembles de travail privé et partagé (WS). L'ensemble privé est généralement plus important pour la plupart des processus, mais il peut y en avoir qui utilisent une plus grande quantité d'ensembles de travail partagés. Les deux devraient normalement s'additionner pour former le total de l'ensemble de travail privé et partagé. Commit est le montant de votre ensemble de travail qui a été engagé dans le magasin de sauvegarde (dans la plupart des cas, le fichier de la page Windows). Les applications en arrière-plan auront souvent un Commit plus important que WS, ce qui indique qu'une grande partie de leur pool de pagination a été échangée de la mémoire vers votre fichier de pagination (ce qui est assez normal pour les applications de bureau qui ont été minimisées et non utilisées pendant un certain temps).

Le pool non paginé est de la mémoire qui ne peut pas, et ne pourra jamais, être échangée hors de la mémoire physique…c'est en fait votre utilisation minimale permanente de mémoire physique. La mémoire du NP Pool contient souvent du code de programme et des sections critiques qui doivent se trouver dans la mémoire physique pour se comporter correctement ou en toute sécurité, des tas spéciaux, etc. Sur 60 processus, si tous ont 256KB de mémoire NP Pool, alors votre utilisation minimale absolue de mémoire physique serait d'environ 15 360KB. Dans la plupart des cas, une ou deux applications peuvent disposer d'un NP Pool de 256 Ko, tandis que la plupart en ont moins, souvent beaucoup moins (ou aucune). Il est très improbable que le système puisse un jour paginer l'ensemble des processus en cours, donc ne vous attendez pas à ce que l'utilisation de la mémoire soit aussi faible.


Enfin, l'intérêt d'avoir plus de mémoire est d'éviter d'avoir à paginer des données vers et depuis un espace mémoire étendu (swap, fichier de page) sur un disque physique. La pagination est un processus qui consiste à déplacer des blocs de mémoire physique allouée, à en pousser certains sur le disque et à en faire entrer d'autres dans la mémoire physique à partir du disque. Pour rester simple, le paging est très indésirable. Il n'est pas “mauvais” en soi, mais il peut être un véritable frein aux performances lorsqu'il se produit trop fréquemment. Le but ultime de l'augmentation de la mémoire vive physique totale d'un système est de permettre à un plus grand nombre de processus de conserver une plus grande partie de leur commit dans la mémoire physique (ensemble de travail plus important). La consommation de mémoire n'est pas un problème, et lorsque davantage de processus d'exécution utilisent plus de mémoire, les performances totales du système et les performances des processus actifs seront généralement plus élevées, car l'activité physique du disque liée aux accès à la mémoire (les fautes de page, en particulier) sera plus faible.

Windows gère la mémoire pour vous, et pagine automatiquement les données dans et hors de la mémoire vers et depuis le fichier de page (swap) pour vous. Si vous exécutez un processus qui nécessite 9 Go de mémoire et que votre système utilise déjà 4 Go (sur 12 Go), le système déterminera automatiquement quels processus n'ont pas besoin d'un accès immédiat à l'ensemble de leur ensemble de travail, et il paginera une partie ou la totalité de leur pool de pages à échanger afin de libérer ce 1 Go supplémentaire. Si votre grand processus a besoin de plus de mémoire, Windows réduira encore l'ensemble de travail des autres processus jusqu'à ce qu'il ait suffisamment d'espace libre pour allouer le bloc nouvellement demandé. Votre processus volumineux pourrait éventuellement consommer toute la mémoire disponible, à l'exception du NP Pool, et peut-être quelques frais supplémentaires minimes pour l'exécution périodique de processus qui ne permettent pas à Windows de libérer une plus grande partie de son ensemble de travail (c'est-à-dire qu'ils ont des défauts de page en attente que Windows aurait autrement permutés hors de la mémoire physique, mais parce qu'ils sont demandés, ils ne peuvent pas être déplacés).

Si un processus a besoin de plus de mémoire qu'il n'est autorisé à accéder (les processus 32 bits peuvent généralement accéder à 2 Go, et certains un peu moins de 4 Go avec des techniques améliorées, tandis que les processus 64 bits peuvent généralement accéder à environ 48 Go de mémoire chacun), alors Windows essaiera parfois de virtualiser sa mémoire avec de l'espace de swap. Si une application 32 bits veut utiliser ses 2 Go d'espace maximum autorisé, mais que seuls 1,2 Go sont disponibles, Windows réservera les 2 Go complets dans le fichier de la page et déplacera les données propres au processus dans et hors du fichier de la page selon les besoins afin de prendre en charge l'utilisation de la mémoire de l'application. Dans ce cas, l'utilisation totale de la “mémoire” peut sembler supérieure à la mémoire physique disponible, si l'on passe de Total Commit. Le Total Commit atteint généralement son maximum à la taille totale du fichier de la page, qui, lorsqu'elle est gérée par le système, est généralement de 2 à 3 fois la quantité de mémoire physique. Dans votre cas, Total Commit serait d'environ 24 Go, ou 2x votre mémoire physique de 12 Go (et ceci est indiqué dans votre première capture d'écran, où il est indiqué : Commit (GB) 3 / 23).


Un dernier point. Vous avez dit dans votre réponse que vous aviez 16 Go de mémoire vive, alors que le gestionnaire des tâches n'en voit que 12. Il y a deux choses ici. Soit votre système ne dispose réellement que de 12 Go de RAM, soit l'un de vos sticks ne s'enregistre pas correctement. Si un stick de RAM (je suppose 4x 4Gb sticks), il peut être mauvais, peut ne pas être installé entièrement correctement dans votre carte mère, ou votre carte mère peut avoir un problème de détection de mémoire.

Pour vérifier si c'est ce dernier cas, vous devez d'abord mettre à jour le BIOS de votre carte mère à la dernière version. J'ai eu un problème similaire… mes six sticks de mémoire vive DDR3 Tripple-Channel (6x 2 Go) étaient tous bons si on les teste individuellement… mais ma carte mère a décidé au hasard de ne pas en compter un ou deux de temps en temps, ne me laissant souvent que 8 Go de mémoire vive. Une mise à jour du BIOS a réglé le problème, et j'ai maintenant un accès fiable à tous les 12 Go de ma mémoire.

12
12
12
2013-11-12 01:35:00 +0000

Comment puis-je savoir pourquoi mon Windows utilise autant de mémoire vive.

Il utilise autant de RAM parce qu'il est conçu pour le faire. Il n'y a absolument aucun coût associé à l'utilisation de la RAM. En fait, la RAM utilisée est meilleure que la RAM libre parce que le système d'exploitation n'a rien à faire pour l'utiliser. L'utilisation de la RAM libre nécessite de la faire utiliser, ce qui demande des efforts.

Si vous pensez “Je veux ma RAM libre maintenant pour pouvoir l'utiliser plus tard”, oubliez. Il n'est pas nécessaire que la RAM soit libre maintenant pour pouvoir l'utiliser plus tard. Vous pouvez l'utiliser maintenant et l'utiliser plus tard. Il n'y a pas de compromis à faire, il n'y a absolument aucun inconvénient à utiliser la RAM.

La RAM est conservée et passe directement d'une utilisation à l'autre sans avoir à faire l'effort de la rendre libre juste pour la faire utiliser à nouveau. Les systèmes d'exploitation modernes ne laissent la RAM libre que lorsqu'ils n'ont pas d'autre choix.

2
2
2
2017-01-14 12:37:08 +0000

Une raison non mentionnée ci-dessus est l'Hyper-V.

J'ai pu l'identifier grâce à l'excellente utilité RamMap :

La capture d'écran est d'après. Avant, la mémoire “Driver Locked” dépassait les 6 Go, soit plus de 80 % de la mémoire vive de cette machine. J'ai dû aller dans Hyper-V Manager et désactiver la “mémoire dynamique”. Curieusement, même après l'avoir réactivée, la mémoire “Driver Locked” est restée faible - je ne peux que supposer que les instances précédentes l'ont augmentée et que l'Hyper-V ne réduit pas automatiquement la mémoire qui lui est allouée :