Question Windows utilisant trop de mémoire vive, comment diagnostiquer les ressources


J'ai 16 Go de RAM système. Au démarrage sans applications ouvertes, le gestionnaire de tâches Windows utilise environ 3 Go de RAM. J'ai regardé dans l'onglet des processus, mais rien ne semble sortir de l'ordinaire. Comment puis-je savoir pourquoi Windows utilise autant de RAM?

enter image description here

tous les processus de tous les utilisateurs

enter image description here


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 utilisera quand même 2,6 Go au démarrage, ce qui est encore trop.

enter image description here


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

enter image description here


65
2017-11-12 01:10


origine


Tout d'abord, vous ne disposez que de 12 Go. L'un de vos quatre bâtons de 4 Go est mauvais ou mal installé, ou votre carte mère ne prend pas en charge 16 Go. Deuxièmement, avez-vous essayé d'exécuter des programmes de sécurité pour détecter les logiciels malveillants? Security Essentials est intégré, assurez-vous de mettre à jour ses définitions et de lancer une analyse. Essayez également certains programmes anti-rootkit car les rootkits masquent spécifiquement (bien qu'ils essaient généralement de garder un profil bas pour passer inaperçu, et que l'utilisation de quelques gigaoctets de RAM ne se mélange pas). - Synetech
Vous pourriez vouloir regarder la performance -> moniteur de ressources - Journeyman Geek♦
Essayez d'exécuter la commande tasklist en redirigeant sa sortie vers un fichier C: \ blah> tasklist> a.a, puis ouvrez le fichier a.a, vous voyez les totaux pour chaque processus, par ex. 15,100K, retirez le K après eux et additionnez le total avec Excel. Voir si le total correspond à la valeur utilisée par le gestionnaire de tâches près de son graphique pour être utilisé. Pour moi, le total de la liste des tâches est de 4 Go et le gestionnaire de tâches dit 4,5 Go. Je ne peux pas expliquer la différence que j'ai mais ce n'est pas énorme. ce serait intéressant si vous avez un énorme écart. - barlop
Je n'ai pas excel - Vader
Les balises NDxx sont ndis.sys. Je suppose que BRCM était Broadcom. Cela indiquerait que votre carte réseau est le problème. - David Marshall


Réponses:


Vous avez une fuite de mémoire provoquée par un pilote. Regardez la valeur élevée de la mémoire non paginée du noyau. Dans votre cas, cela dépasse les 3,7 Go. Vous pouvez utiliser poolmon pour voir quel pilote provoque la forte utilisation.

Installez le Windows WDK, exécutez poolmon, triez-le via P après le type de pool pour que non paginé soit en haut et via B après octets pour voir l'étiquette qui utilise le plus de mémoire. Exécutez poolmon en accédant au dossier où WDK est installé, accédez à Outils (ou C: \ Program Files (x86) \ Windows Kits \ 10 \ Tools \ x64) et cliquez sur poolmon.exe.

Maintenant, regardez quel pooltag utilise le plus de mémoire, comme indiqué ici:

enter image description here

Ouvrez maintenant une invite de commande et exécutez la commande findstr. Pour ce faire, ouvrez l'invite cmd et tapez "cd C: \ Windows \ System32 \ drivers", sans guillemets. Puis tapez "findstr / s __ .", où __ est la balise (nom le plus à gauche dans poolmon). Faites ceci pour voir quel pilote utilise cette balise:

enter image description here

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

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

tu as l'habitude xperf pour tracer les causes de l'utilisation. Installez le WPT depuis le SDK Windows, ouvrir un cmd.exe en tant qu'administrateur et lancez ceci:

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

capturer 30 -60s de la croissance. Ouvrez l'ETL avec WPA.exe, ajoutez les graphiques de pool au volet d'analyse.

Placez la colonne pooltag à la première place et ajoutez la colonne de la pile. À présent charger les symboles dans WPA.exe et développez la pile de la balise que vous avez vue dans poolmon.

enter image description here

Trouvez maintenant d'autres pilotes tiers que vous pouvez voir dans la pile. Ici le Thre tag (Thread) est utilisé par AVKCl.exe de G-Data. Recherchez les mises à jour du pilote / programme pour y remédier.


77
2017-11-12 04:54



Oh pardon. @Jebediah Kerman avez-vous lancé la commande findstr? Du nom, il pourrait s'agir d'un pilote de carte réseau. Si vous avez toujours des problèmes, lancez RAMMap, stockez les données sous RMP, compressez le fichier RMP et téléchargez le fichier zip. - magicandre1981
cela peut sembler stupide. Mais comment puis-je démarrer poolmon? Je pouvais rechercher "poolmon.exe" et lancer - Vader
@JebediahKerman Je pense que vous avez déjà fait cela et trouvé les balises. L'image de votre message n'est-elle pas votre poolmon? - magicandre1981
La photo est à moi. pour une raison quelconque, l'index de recherche était incomplet. - Vader
@JebediahKerman avez-vous regardé ce que ce NDFT est? Vous pouvez également utiliser xperf pour suivre l'utilisation du pool: channel9.msdn.com/Shows/Defrag-Tools/... - magicandre1981


Eh bien, la 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 inhabituel, surtout 30 minutes seulement après le démarrage. Je suppose que je pouvais voir NP Pool atteindre un tel niveau après une utilisation prolongée ou avec un programme qui fuyait comme un tamis. En revanche, mon pool NP est généralement compris entre 100 et 200 mégaoctets, et mon pool paginé peut atteindre 400 ou 500 méga-octets (et ce, après l’exécution du 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 sélectionnant Sélectionner les colonnes. Vous devriez ajouter Working Set (private), Working Set (shared), Commit, et NP Pool. Je scannerais tous les processus de tous les utilisateurs et verrais si l'un d'entre eux possède un pool NP supérieur à environ 256 Ko. 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). Private est généralement plus grand pour la plupart des processus, mais certains peuvent utiliser une plus grande quantité de WS partagés. Les deux devraient normalement totaliser le WS total. Commit est la quantité de votre ensemble de travail qui a été validée dans le magasin de sauvegarde (dans la plupart des cas, le fichier de page Windows). Les applications d'arrière-plan ont souvent un plus grand engagement que WS, ce qui indique qu'une grande partie de leur pool paginé a été transférée de la mémoire dans votre fichier de pagination (ce qui est assez normal pour les applications de bureau minimisées et inutilisées).

Le pool non paginé est de la mémoire qui ne peut pas et ne sera jamais remplacée par la mémoire physique ... ce qui correspond effectivement à votre utilisation de mémoire physique minimale permanente. La mémoire du pool NP contient souvent du code de programme et des sections critiques qui doivent se trouver dans la mémoire physique pour se comporter correctement ou de manière sécurisée, des tas spéciaux, etc. serait autour de 15 360KB. Dans la plupart des cas, une ou deux applications peuvent avoir un pool de 256 Ko, tandis que la plupart en ont moins, souvent beaucoup moins (voire aucune). Il est très improbable que le système écrase la totalité de tous les processus fonctionnant, donc ne vous attendez jamais à ce que l'utilisation de la mémoire soit aussi faible.


Enfin, le but d'avoir plus de mémoire est d'éviter d'avoir à page des données vers et depuis l'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, à les transférer sur le disque et à les amener dans la mémoire physique à partir du disque. Paging est, pour rester simple, hautement indésirable. Ce n'est pas "mauvais" en soi, mais cela peut être un véritable frein à la performance quand il se produit trop fréquemment. Le point ultime de l'augmentation de la mémoire vive physique totale dans un système est de permettre à davantage de processus de conserver davantage de validation dans la mémoire physique (ensemble de travail plus volumineux). Consommer de la mémoire ne pose aucun problème et lorsque les processus d’exécution consomment 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 liée aux accès mémoire (erreurs de page en particulier) sera moindre.

Windows gère la mémoire pour vous et publie automatiquement les données dans et hors de la mémoire vers et depuis le fichier de page (échange) pour vous. Si vous exécutez un processus nécessitant 9 Go de mémoire et que votre système utilise déjà 4 Go (sur 12 Go), le système déterminera automatiquement les processus qui ne nécessitent pas d’accès immédiat à l’ensemble de leur pool paginé à échanger afin de libérer ce 1 Go supplémentaire. Si votre grand processus a finalement besoin de plus de mémoire, Windows réduira davantage le jeu de travail des autres processus jusqu'à ce qu'il dispose de suffisamment d'espace libre pour allouer le nouveau bloc demandé. Votre processus volumineux pourrait éventuellement consommer toute la mémoire disponible, à l’exception de NP Pool et peut-être une charge supplémentaire minime pour exécuter périodiquement des processus qui ne permettent pas à Windows de libérer davantage son jeu (c.-à-d. mémoire physique, mais comme 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 un peu moins à 4 Go avec des techniques améliorées, alors que les processus 64 bits peuvent accéder à environ 48 Go chacun), Windows essaiera parfois pour virtualiser sa mémoire avec un espace de swap. Si une application 32 bits veut utiliser son espace maximum autorisé de 2 Go, mais que seuls 1,2 Go sont disponibles, Windows réservera l'intégralité du 2 Go dans le fichier de page et déplacera les données du processus dans et hors du fichier de page pour prendre en charge l'utilisation de la mémoire de l'application. L'utilisation totale de la mémoire dans ce cas peut sembler supérieure à la mémoire physique disponible, lorsque Total Commit est utilisé. Total Commit maximise généralement la taille totale du fichier de la page, qui, lorsqu'elle est gérée par le système, correspond généralement à 2 à 3 fois la quantité de mémoire physique. Dans votre cas, Total Commit serait autour de 24 Go, soit 2 x votre mémoire physique de 12 Go (et ceci est indiqué dans votre première capture d'écran, où il est écrit: Commit (GB) 3/23).


Un dernier point Vous avez dit dans votre réponse que vous aviez 16 Go de RAM, alors que Task Manager ne voit que 12 Go de RAM. Une des 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 bâton de ram (je suppose des bâtons 4 x 4 Go) peut être mauvais, il se peut que votre carte mère ne soit pas correctement installée ou que votre carte mère ait un problème de détection de mémoire.

Pour vérifier si c'est le dernier, vous devez d'abord mettre à jour le BIOS de votre carte mère avec la dernière version. J'ai eu un problème similaire ... mes six bâtons de DDR3 Tripple-Channel (6x 2Gb) étaient tous bons sur la base de tests individuels chacun ... mais ma carte mère a décidé de ne pas compter un ou deux d'entre eux de temps en temps, me laissant souvent avec seulement 8 Go de RAM. Une mise à jour du BIOS a résolu le problème et j'ai maintenant un accès fiable à tous les 12 Go de mémoire.


14
2017-11-12 05:41



intéressant..et je viens de remarquer que sa mémoire non paginée étant très grande..mine est 539MB paginée, 139MB non paginée.U en sait clairement plus que moi à ce sujet .. Mais vous avez tort sur total commit.U écrire "Total Commit max généralement à la taille totale du fichier de la page" Ma mémoire vive est de 12 Go. Je mets mon fichier d'échange sur 4000 Mo (3,8 Go?) min et 1,5-2x mémoire comme max.Ma max commit est de 15 Go (commit = 7 / 15 actuellement), mon fichier d'échange est environ 4 Go ou probablement un peu moins comme 3.8 Go.Max Commit est plus comme la taille du fichier d'échange + la taille de la RAM.Lorsque mon fichier d'échange était de 12 Go mon commit max était d'environ 24 Go. Le fichier d'échange de près de 3,8 Go ou 4 Go maximum est de 15 Go - barlop
@barlop: Eh bien, vous comprenez un peu ce qu'est le commit. Techniquement parlant, la charge de validation correspond à l’espace de mémoire "totalement adressable", y compris l’espace pris en charge par les gestionnaires de mémoire étendue et la prise en compte des adresses étendues. Max commit ne serait pas un fichier de page + RAM, mais plutôt un espace d'adressage virtuel géré par le système. Le fichier de pages devrait généralement couvrir, au minimum, la taille totale de la mémoire physique et l'étendre au-delà de la taille totale de la mémoire physique. Dans votre cas, je m'attendais à être au moins de 18 Go (1,5 x) ou 24 Go (2x), mais cela ... - jrista
... serait le cas pour un fichier de page géré par le système. Il semble que vous ayez modifié manuellement vos paramètres de fichier de page, auquel cas je devrais en savoir plus sur votre configuration spécifique pour vous dire pourquoi votre commit actuel est de 15 Go (car le fichier de page 3.8 / 4Gb indiquerait un commit de 16 Go). .) Il est tout à fait possible de configurer manuellement aucun fichier de page, ou un fichier de page trop petit, ce qui peut entraîner des problèmes de performance inhabituels et des problèmes d’allocation de mémoire. La meilleure recommandation, à moins que vous ayez une configuration de serveur hautement spécifique (par exemple, une base de données), consiste à autoriser Windows à gérer son fichier de page. - jrista
Une dernière note Pour une performance maximale, il est préférable de laisser Windows allouer la taille maximale du fichier de la page à l'avance. Cela se fait généralement sur des configurations de serveur comme une base de données SQL Server, où vous pouvez pré-allouer 64 Go ou plus (généralement deux fois la taille physique, peut-être même 128 Go ou 256 Go) à un fichier distribué uniformément entre plusieurs disques physiques. . Les fichiers de page distribués, en particulier lorsqu'ils sont pré-alloués à la taille maximale, permettent des lectures / écritures entrelacées sur tous les disques participants, ce qui permet d'améliorer les performances de pagination via des E / S parallèles. - jrista
À titre d'exemple d'une charge de mémoire importante, mon système a actuellement: 7.5 / 12Gb de mémoire physique; 14,7 / 23,3 Gb commit; 491mb pool paginé; Piscine de 145mb np. Ceci est pour 146 processus, piscine paginée max 2276k max pool np 263k. La plus grande taille de validation 696,396k, et pour le même processus, WS est 714,256k (un processus de l'onglet Opera). (Mon compte de processus élevé est dû au navigateur Web ... ils isolent les onglets par processus ces jours-ci, ... des dizaines ouvrent en même temps, des dizaines de processus supplémentaires.) - jrista


Comment puis-je savoir pourquoi Windows utilise autant de RAM?

Il utilise beaucoup de RAM car il est conçu faire cela. Il n'y a absolument aucun coût associé à l'utilisation de la RAM. En fait, la mémoire vive utilisée est meilleure que la mémoire vive car le système d'exploitation n'a rien à faire pour l'utiliser. Utiliser de la mémoire vive gratuite nécessite de l’utiliser avec des efforts.

Si vous pensez "Je veux que ma RAM soit libre maintenant pour pouvoir l'utiliser plus tard", oubliez ça. 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 y a non compromis ici - il n'y a absolument aucun inconvénient à utiliser la RAM.

La mémoire vive est utilisée et basculée directement d'une utilisation à une autre sans avoir à s'efforcer de la rendre gratuite. Les systèmes d'exploitation modernes ne libèrent de la RAM que lorsqu'ils n'ont pas le choix.


12
2017-11-12 01:35



Si mon système Windows7 utilise 3 Go de RAM au démarrage, sans aucune application ouverte, quelque chose doit être faux - Vader
@JebediahKerman Pourquoi dites-vous cela? J'ai essayé de vous expliquer pourquoi ce n'est pas le cas et pourquoi Windows est conçu pour le faire. Avez-vous pas compris mon explication? Ou, si vous n'êtes pas d'accord, pourriez-vous expliquer où vous pensez que je me trompe? - David Schwartz
@DavidSchwartz réponse totalement fausse. Il a une fuite de mémoire par un conducteur - magicandre1981
@DavidSchwartz: Le comportement que vous décrivez (allocations de RAM pouvant être réutilisées) doit nécessairement être créé à partir de mémoire paginable. Le chiffre inquiétant est de 1,3 Go de mémoire non paginée. Vous ne pouvez pas simplement libérer cela pour d'autres ressources, où iraient ces 1,3 Go? Être "non paginé" signifie que le propriétaire a dit "ces octets sont si importants, vous ne pouvez même pas les mettre sur le disque, et encore moins les jeter". - MSalters
Pourquoi cette "réponse" est-elle si élevée? Il complètement manque le point. Indépendamment des mots spécifiques utilisés (qui étaient parfaitement clairs pour commencer), la question n'est pas “Why is Windows using RAM?”, La question est “Why do the RAM usage numbers not add up; why is one part reporting a higher usage than another part?” Cet article devrait être un commentaire au mieux car il ne traite pas de la question réelle ou même tentative pour y répondre; il ne retient que quelques conseils, et mal conseil à ce sujet puisque si l'OP l'avait ignoré comme suggéré, la fuite de mémoire ne serait pas découverte. - Synetech


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

J'ai pu l'identifier avec l'excellent utilitaire RamMap:

enter image description here

La capture d'écran est à partir de après. Avant que la mémoire "Driver Locked" soit supérieure à 6 Go, plus de 80% de la RAM de cette machine. Je devais aller dans Hyper-V Manager et désactiver "Dynamic Memory". Curieusement, même après l'avoir réactivé, la mémoire "Driver Locked" est restée faible - je ne peux que présumer que les instances précédentes l'ont augmentée et que Hyper-V ne réduit pas automatiquement sa mémoire allouée:

enter image description here


0
2018-01-14 12:37