web-dev-qa-db-fra.com

Windows utilisant trop de RAM, comment diagnostiquer le problème des ressources

J'ai 16 Go de RAM système. Au démarrage, aucune application ouverte sauf 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 pool, il semble que mon pilote broadcom sans fil utilise environ 0,4 Go de RAM. Même si je l'enlève, il utilisera toujours 2,6 Go au démarrage, ce qui est encore trop.

enter image description here


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'agissait bien d'une fuite de mémoire.

enter image description here

71
Vader

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

Installez le Windows WDK , lancez poolmon, triez-le via P après le type de piscine afin que non paginé est sur et via B après octets pour voir la balise qui utilise le plus de mémoire. Exécutez poolmon en accédant au dossier d'installation de WDK, accédez à 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:

enter image description here

Ouvrez maintenant une invite de commande et exécutez la commande findstr. Pour ce faire, ouvrez 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

À présent, accédez au 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 trouver 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")

vous avez utilisé xperf pour tracer ce qui provoque l'utilisation . Installez le WPT à partir du SDK Windows , ouvrez 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 -Fichier circulaire && timeout -1 && xperf -d C:\pool.etl

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

Placez la colonne pooltag en premier lieu et ajoutez la colonne de pile. Maintenant chargez 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, la balise Thre (Thread) est utilisée par AVKCl.exe de G-Data. Recherchez les mises à jour de pilotes/programmes pour y remédier.

81
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 réserve non paginée (type d'utilisation de la mémoire du noyau) est à 1,3 Go. Cela me semble inhabituellement élevé, surtout 30 minutes seulement après le démarrage. Je suppose que je pourrais voir NP piscine atteindre ce niveau après une utilisation prolongée ou avec un programme qui fuyait comme un tamis. Par contraste, mon NP pool est généralement compris entre 100 et 200 mégaoctets et mon pool paginé peut atteindre 400 ou 500 (et cela après que mon système ait été exécuté 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 de la souris sur les en-têtes de colonne et en choisissant la sélection de 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 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és et partagés. Privé est généralement plus volumineux pour la plupart des processus, mais certains d'entre eux utilisent une plus grande quantité de services partagés. La somme des deux doit normalement correspondre au nombre total de WS. La validation correspond à la quantité de votre groupe de travail qui a été validée dans le magasin de sauvegarde (dans la plupart des cas, le fichier d'échange Windows). Les applications en arrière-plan ont souvent une plus grande validation que WS, ce qui indique qu'une grande partie de leur pool paginé a été remplacée par la mémoire et insérée dans votre fichier de pagination (ce qui est assez normal pour les applications de bureau minimisées et non utilisées pendant un certain temps).

Le pool non paginé est une mémoire qui ne peut pas, et ne pourra jamais, être remplacée par de la mémoire physique ... ce qui correspond effectivement à l'utilisation minimale permanente de la mémoire physique. NP La mémoire de pool contient souvent du code de programme et des sections critiques qui doivent être dans la mémoire physique pour se comporter correctement ou de manière sécurisée, des tas spéciaux, etc. Sur 60 processus, s'ils ont tous 256 Ko de mémoire de pool NP , votre consommation de mémoire physique minimale absolue serait alors de 15 360 Ko environ. Dans la plupart des cas, une ou deux applications peuvent avoir un pool de NP de 256 Ko, tandis que la plupart en ont moins, souvent considérablement moins (voire aucun). Il est hautement improbable que le système trace jamais la totalité de l'ensemble des processus en cours, aussi ne vous attendez pas à ce que l'utilisation de la mémoire devienne aussi faible.


Enfin, l’intérêt d’avoir davantage de mémoire est d’éviter d’avoir à feuilleter des données vers et depuis l’espace mémoire étendu (swap, fichier de page) d’un disque physique. La pagination est un processus qui implique le déplacement de blocs de mémoire physique allouée, le transfert de certains sur le disque et le transfert des autres dans la mémoire physique. La pagination est, pour rester simple, hautement indésirable. Ce n'est pas «mauvais» en soi, mais cela peut être un frein sérieux aux performances quand elles se produisent trop fréquemment. Le point ultime de l’augmentation de la RAM physique totale dans un système est de permettre à davantage de processus de conserver une plus grande partie de leur validation dans la mémoire physique (ensemble de travail plus grand). Consommer de la mémoire ne pose pas de problème et, lorsque davantage de processus en cours utilisent plus de mémoire, les performances système globales et les performances des processus actifs seront généralement meilleures, car l'activité du disque physique liée aux accès à la mémoire (notamment les défauts de page) sera plus faible.

Windows gère la mémoire pour vous et met automatiquement en mémoire les données des pages vers et depuis le fichier d'échange (swap). Si vous exécutez un processus nécessitant 9 Go de mémoire et que votre système en utilise déjà 4 (sur 12 Go), le système déterminera automatiquement les processus qui ne nécessitent pas un accès immédiat à leur ensemble de travail complet, et pagera tout ou partie de celui-ci. de leur pool paginé sur pour échanger afin de libérer ce 1GB supplémentaire. Si votre processus volumineux a finalement besoin de plus de mémoire, Windows réduira encore le nombre de processus en cours jusqu'à ce qu'il dispose de suffisamment d'espace libre pour allouer le nouveau bloc demandé. Votre processus volumineux pourrait éventuellement utiliser toute la mémoire disponible, à l'exception de NP Pool et peut-être une surcharge supplémentaire pour l'exécution périodique de processus qui ne permettent pas à Windows de libérer davantage de leur ensemble de travail (c'est-à-dire qu'ils ont des erreurs de page en attente que Windows sinon, remplacez la 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é à en 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, alors que les processus 64 bits peuvent généralement accéder à environ 48 Go de mémoire), Windows essaie parfois virtualiser sa mémoire avec l’espace de swap. Si une application 32 bits veut utiliser son maximum d'espace autorisé de 2 Go, mais que seulement 1,2 Go sont disponibles, Windows réservera l'intégralité des 2 Go dans le fichier de page et déplacera les données propres du processus dans et hors du fichier de page selon les besoins afin de: soutenir l'utilisation de la mémoire de l'application. L'utilisation totale de "mémoire" dans ce cas peut sembler être supérieure à la mémoire physique disponible, lors de l'activation totale. L'engagement total correspond généralement au maximum de la taille du fichier de page, qui, lorsqu'il est géré par le système, correspond généralement à 2 à 3 fois la quantité de mémoire physique. Dans votre cas, l’engagement total serait d’environ 24 Go, soit 2 fois votre mémoire physique de 12 Go (et ceci est indiqué dans votre première capture d’écran où il est indiqué: Engagement (Go) 3/23).


Un dernier point. Vous avez dit dans votre réponse que vous disposiez de 16 Go de RAM, alors que le Gestionnaire des tâches ne voit que 12 Go de RAM. Une des deux choses ici. Soit votre système ne dispose que de 12 Go de RAM, soit l’un de vos bâtons n’est pas enregistré correctement. Si un bâton de bélier (je suppose 4 bâtons de 4 Go), il se peut qu’il soit mauvais, qu’il ne soit pas correctement installé dans votre carte mère ou que votre carte mère présente un problème de détection de mémoire.

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

15
jrista

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

Il utilise tellement 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, utilisé RAM est mieux que gratuit RAM parce que le système d'exploitation n'a rien à faire pour l'utiliser. Utiliser free RAM nécessite de l'utiliser, ce qui nécessite des efforts.

Si vous pensez « Je veux que mon RAM libre maintenant pour que je puisse l'utiliser plus tard », l'oublier. RAM n'a pas besoin d'être libre maintenant pour l'utiliser plus tard. Vous pouvez l'utiliser maintenant et l'utiliser plus tard. Il est pas compromis entre ici - il n'y a absolument aucun inconvénient à l'utilisation de la RAM.

RAM est utilisé et conservé directement commuté d'une utilisation à l'autre sans avoir à passer par l'effort de le rendre gratuit juste d'avoir à faire à nouveau utilisé. Les systèmes d'exploitation modernes laissent RAM libre seulement quand ils ont pas d'autre choix.

12
David Schwartz

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 d'après. Avant que la mémoire "Driver Locked" ne dépasse 6 Go, plus de 80% de la RAM de cette machine. Je devais entrer dans le gestionnaire Hyper-V et désactiver la "mémoire dynamique". Curieusement, même après la réactivation, la mémoire "Driver Locked" est restée faible - je ne peux que supposer que les instances antérieures l'ont augmentée et que Hyper-V ne réduit pas automatiquement la mémoire allouée:

 enter image description here

1
Dagelf