Avertissements de mémoire faible de Windows 10 lorsque j'ai beaucoup de mémoire disponible

25

J'ai eu un problème où, si mon système est en place depuis quelques jours sans être redémarré, je vais commencer à recevoir des avertissements disant "Fermer les programmes pour éviter la perte d'informations" puis un dialogue suggérant de fermer les programmes, que je peux annuler ou appuyer sur "Fermer les programmes" et Windows forcera la fermeture de tout ou partie des applications répertoriées dans la boîte de dialogue.

J'ouvre le gestionnaire de tâches et constate que seulement environ 30% de ma mémoire est actuellement utilisée:

33% d'utilisation

Lorsque j'ouvre le moniteur de ressources pour voir la quantité de mémoire engagée utilisée par des applications spécifiques, je constate toujours une utilisation de la mémoire relativement faible:

Moniteur de ressources

J'ai ce problème depuis un certain temps et j'ai du mal à trouver une solution. J'ai étudié des causes comme une fuite de pilote en utilisant poolmon, mais je n'ai jamais rien vu dans poolmon correspondant à ce que d'autres ont décrit comme des signaux rouges pour une fuite de mémoire de pilote. Ce qui me rend particulièrement confus, c'est pourquoi Win10 me dit de fermer les applications lorsque je n'ai que 33% de la mémoire système utilisée.

Brandon
la source
3
Essayez d'accéder au gestionnaire de tâches et accédez à l'onglet performances. Que montre le champ de mémoire validée?
DrZoo
Je n'ai pas enregistré de capture d'écran pour cela, mais ma mémoire engagée était un pourcentage élevé de disponible, quelque chose comme 17,5 Go / 19 Go.
Brandon

Réponses:

15

Devinettes sauvages ici.

Vous avez désactivé votre fichier d'échange, en suivant les conseils aléatoires "d'optimisation" de quelqu'un.

Vous avez un pilote de système d'exploitation d'une sorte qui veut un gros bloc de RAM physique consécutive. Mais il ne peut pas l'obtenir car toute la RAM physique a été fragmentée au fil du temps. Et comme le fichier d'échange est désactivé, il ne peut pas effectuer de défragmentation de la RAM.

Activez votre fichier d'échange.

Comme je l'ai dit, devinez.

Zan Lynx
la source
Eh bien, j'ai une taille de fichier d'échange de 3 Go max. Est-ce ce que vous entendez par fichier d'échange ou est-ce une chose gérée séparément dans Windows 10? Ce n'est pas impossible que j'aurais fait quelque chose comme ça, j'ai eu des problèmes de performances extrêmement mauvais lorsque j'ai construit cette machine pour la première fois en 10/2015 et essayé plusieurs choses comme désactiver le parking de base pour le réparer. Il s'est avéré qu'il y avait un système de gestion de l'alimentation qui réduisait ma puissance à 10% et affamait tous les composants.C'est pourquoi j'ai eu des problèmes de performances systémiques, mais il est possible que j'aie fait quelque chose comme vous l'avez dit pendant cet épisode.
Brandon
1
Modifiez la taille de votre fichier d'échange en "Géré par le système" et vos problèmes disparaîtront probablement.
Scott Chamberlain
Une fois, j'ai fait gérer le système, et j'ai toujours eu le même problème, cela prendrait plus de temps à se manifester. Lorsque je le définissais comme géré par le système, le fichier d'échange atteindrait un maximum de 64 Go, je crois, puis lorsque la validation était très élevée, j'obtenais toujours les mêmes avertissements de mémoire faible. Mais je verrais toujours environ 70% de mémoire physique disponible et aucune indication dans le moniteur de ressources que plus de 60 Go de mémoire étaient actuellement engagés dans un processus répertorié.
Brandon
Je suis entièrement d'accord avec Zan et Scott, c'est votre fichier d'échange qui cause ce problème (voir windowsitpro.com/windows-10/… pour une autre source qui dit aussi cela). Réglez-le sur système géré et si le problème réapparaît, ALORS commencez à enquêter.
Ƭᴇcʜιᴇ007
Je pense donc que le fichier d'échange géré par le système était la réponse principale ici. Il semble que le définir sur 3 Go statique ne soit tout simplement pas idéal dans l'environnement Windows 10. J'ai implémenté cette solution il y a quelques semaines et je l'ai laissée s'exécuter en utilisation normale juste pour voir ce qui s'est passé et bien que je vois encore beaucoup plus de mémoire engagée que celle indiquée dans la colonne de mémoire dédiée du moniteur de ressources, je ne suis pas en train de manquer de mémoire avertissements ou problèmes maintenant.
Brandon
14

Concernant votre dernier Q - la version courte: le message d'erreur concerne l'espace d'adressage virtuel «engagé». Si vous regardez le graphique Commit Charge dans votre deuxième instantané d'écran, vous verrez qu'il est en effet proche ou très proche de la limite.

La quantité de RAM «libre», «disponible» ou «en cours d'utilisation» n'a pas d'importance. En particulier, une pénurie de RAM «disponible» n'est absolument pas la raison du message «mémoire insuffisante» ou «mémoire insuffisante».

La limite de validation est égale à la taille totale RAM + fichier d'échange. Lorsque la mémoire validée est allouée, elle est immédiatement chargée pour "valider la charge" même si elle n'a pas encore été utilisée ... ce qui signifie qu'aucun espace RAM ou PF n'est utilisé immédiatement. L'espace physique (que ce soit dans la RAM ou dans le fichier d'échange) n'est utilisé que lorsque la mémoire est réellement référencée. À partir de ce moment, il doit y avoir un emplacement, jusqu'à ce que le programme le libère ou que tout le processus se termine.

Exemple: supposons que vous n'ayez pas de fichier d'échange, votre limite de validation est donc de 16 Go (la taille de votre RAM). Supposons maintenant que 8 processus essaient chacun de VirtualAlloc (MEM_COMMIT) 1 Go. Résultat: la charge de validation est augmentée de 8 Go. Cependant, il n'y a pas d'impact immédiat sur la RAM! C'est comme si vous aviez acheté un bloc de papier au magasin de papeterie, mais vous n'aviez en fait pas obtenu de papier. Cependant, chaque fois que vous avez besoin d'une nouvelle feuille, une apparaît comme par magie. Jusqu'à ce que vous utilisiez le pad entier (la taille de la région allouée).

Supposons maintenant que chacun de ces processus n'accède réellement qu'à 100 Mo sur ses 1 Go. La RAM utilisée ne serait que de 800 Mo.

Mais comme chacun d'entre eux peut référencer l'ensemble de ses 1 Go, le système d'exploitation doit garantir que 8 Go de RAM + espace de fichier d'échange ... eh bien, juste de la RAM dans le cas où aucun fichier d'échange ... n'est disponible au cas où cela se produirait . Pour en revenir au magasin de papeterie, ils doivent garder suffisamment de papier en stock pour donner à chacun autant de feuilles qu'ils l'ont précédemment acheté.

Par conséquent, le système d'exploitation doit cesser d'autoriser VirtualAlloc (MEM_COMMIT) à réussir lorsque le montant actuel engagé atteint la limite.

Pourquoi? Parce que le processus est censé vérifier le résultat de VirtualAlloc pour voir s'il a réussi. Une fois qu'il l'a fait et a constaté que l'allocation a réussi, le processus est en droit de s'attendre à ce que ses références ultérieures à l'ensemble de la région engagée réussissent.

Si Windows permettait que les frais de validation dépassent la quantité d'espace disponible pour réaliser cet espace, cette attente ne pourrait pas toujours être satisfaite.

Une solution rapide consiste à augmenter la taille par défaut (= initiale) de votre fichier d'échange. À partir de l'explication ci-dessus, vous devriez pouvoir voir pourquoi cela évitera le message d'erreur même si rien ne peut jamais être écrit dans ce fichier . Encore une fois, le système d'exploitation garantit que l'espace pour tous les frais de validation est disponible au cas où il en aurait besoin . Lorsque les processus allouent de la mémoire engagée, ils disent simplement "hé, OS, j'aurais peut-être besoin de cela." Cela ne signifie pas qu'ils l'utiliseront réellement, et cela ne signifie certainement pas qu'ils l'ont déjà utilisé.

Pour en savoir plus, voir ma réponse ici .

Maintenant ... pourquoi vous utilisez autant de commit lorsque vos processus ne semblent pas s'additionner, c'est une autre question. Pour commencer à regarder cela, veuillez afficher l'onglet Performances du Gestionnaire des tâches, section Mémoire.

Jamie Hanrahan
la source
Je n'ai pas de mots pour décrire une réponse aussi parfaite. Merci.
Vinicius Tavares
-2

Une autre possibilité est que vous utilisez Win10 32 bits, pas 64 bits. Bien que 16 Go de RAM soient installés, il existe des limitations de système d'exploitation 32 bits qui font une utilisation pratique au-dessus de 4 points. De plus, le système d'exploitation imposera des limites strictes / par processus / sur la quantité de RAM pouvant être demandée, quelle que soit la RAM physique. Si tel est le cas, vous ne pouvez pas faire grand-chose d'autre que de passer à un système d'exploitation 64 bits ou d'exécuter moins d'applications simultanément.

Mekki MacAulay
la source
2
Il ne serait pas possible d'exécuter Win10 32 bits et d'avoir le Gestionnaire des tâches afficher un total de 16 Go, comme il le fait dans l'OQ. Et btw, les limites par processus que le système d'exploitation pose sont sur la mémoire virtuelle, pas sur la RAM. Il n'y a aucun appel que vous pouvez faire dans Windows pour allouer de la RAM en soi . (Eh bien, AWE, mais cela prend des privilèges d'administrateur et presque rien ne l'utilise, sauf certains programmes système.) Vous allouez de l'espace d'adressage virtuel (par exemple avec VirtualAlloc), puis vous l'utilisez; au fur et à mesure que vous l'utilisez, le système d'exploitation alloue de la RAM à votre processus ("pagination à la demande"). Mais bien sûr, tout ne doit pas être réalisé en RAM en même temps.
Jamie Hanrahan