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:
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:
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.
la source
Réponses:
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.
la source
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.
la source
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.
la source