Au fil des années d'utilisation de Windows, je suis habitué au Gestionnaire des tùches. De là , j'ai tué des centaines d'applications pour mauvais comportement. Là , il a regardé lequel d'entre eux dévore des ressources. Jusqu'à ce que je commence à travailler avec des machines qui ont des centaines de gigaoctets de mémoire, et les applications ont des demandes correspondantes. Cet article explique pourquoi le Gestionnaire des tùches ne suit pas bien la mémoire et ce qu'il faut utiliser en retour. Tout d'abord, sur le mécanisme d'allocation de mémoire dans Windows.
tl; dr: le gestionnaire de tùches masque les informations sur la mémoire paginée et l'espace virtuel du processus. Mieux utiliser Process Explorer du pack Sysinternals.
Allocation Windows
Lors du dĂ©marrage d'un nouveau processus, le systĂšme d'exploitation attribue un espace d'adressage continu Ă ce processus. Sur les systĂšmes 32 bits, cet espace peut ĂȘtre de 4 Go, gĂ©nĂ©ralement 2 Go pour le noyau et le reste pour le processus. Cet article ignorera l'utilisation de la mĂ©moire principale. Sur les systĂšmes 64 bits, la mĂ©moire rĂ©servĂ©e aux processus peut atteindre un Ă©norme 64 To. Que fera ce processus avec quelques tĂ©raoctets de mĂ©moire alors que nous avons en fait un misĂ©rable 8 Go? Vous devez d'abord comprendre ce qu'est la mĂ©moire rĂ©servĂ©e et transfĂ©rĂ©e.
Mémoire réservée et transférée
Toutes les parties de cet immense espace d'adressage ne sont pas égales. Certaines parties de l'espace d'adressage du processus sont réellement prises en charge par la RAM physique ou par un disque (voir ci-dessous). La mémoire réservée est considérée comme engagée si le systÚme d'exploitation vous propose cette mémoire lorsque vous essayez de l'utiliser. Le reste de l'espace d'adressage, et c'est la grande majorité, reste disponible pour la réservation. Autrement dit, le systÚme d'exploitation peut ne pas toujours vous offrir ce bloc de mémoire à utiliser: il peut faire une copie sur le disque (fichier d'échange), par exemple, ou il peut ne pas le faire. En C ++, la mémoire est réservée en appelant
VirtualAlloc . La mémoire transférée est donc une ressource matérielle limitée dans le systÚme d'exploitation. Voyons voir.
Fichier d'échange de systÚme d'exploitation
Le fichier d'échange est une excellente idée. Fondamentalement, le systÚme d'exploitation
comprend que certaines parties de la mémoire ne sont pas particuliÚrement utilisées par votre application. Pourquoi y consacrer une vraie mémoire physique? Au lieu de cela, le processus du noyau écrit ce fragment inutilisé sur le disque. Jusqu'à ce qu'ils se tournent à nouveau vers lui, alors seulement il reviendra à la mémoire.
Pour une explication plus détaillée du fonctionnement de la mémoire dans Windows, je recommande la conférence
«Secrets of memory management» de Mark Russinovich.
Suivi de la mémoire
Il y a beaucoup à regarder et à analyser. Qui contacter? Bien sûr, au gestionnaire de tùches!
La mémoire RAM est généralement appelée l'ensemble de travail, tandis que toute la mémoire allouée est généralement appelée octets privés. Les DLL confondent les définitions, alors ignorez-les pour l'instant. En d'autres termes:
Private Bytes [ ] = +
Par défaut, le Gestionnaire des tùches affiche exactement l'ensemble de travail pour tout processus:

Et c'est le nombre que je regardais tout le temps. Comment savais-je que dans le Gestionnaire des tùches les informations sur la mémoire transférée se trouvent dans la colonne
Commit Size
. Je n'ai pas pu y trouver d'informations sur la mémoire virtuelle.
Le gestionnaire de tùches vous permet d'ajouter des informations sur la mémoire transférée, si vous cliquez avec le bouton droit sur les colonnes et sélectionnez l'élément correspondantMesures de mémoire efficaces
Heureusement, il existe de nombreuses autres ressources pour le suivi des ressources. PerfMon (System Monitor) est installé sur chaque machine Windows, qui fournit des informations trÚs détaillées sur chaque processus et le systÚme dans son ensemble:

Fait intéressant, le Moniteur systÚme peut réellement examiner et comparer les mesures sur deux ordinateurs ou plus sur le réseau. Il s'agit d'un outil trÚs puissant, mais le Gestionnaire des tùches est évidemment plus convivial. Je recommande
Process Explorer comme solution intermédiaire:

Boum! Visual Studio, pourquoi ĂȘtes-vous toujours en mode 32 bits (faites attention Ă sa taille virtuelle)? L'utilisation maximale de la mĂ©moire sur mon ordinateur Ă 89% du maximum est toujours supportable. Cela vous sera utile plus tard.
Addition: beaucoup ont indiqué d'autres outils pratiques, notamment
VMMap et
RAMMap .
Débogage sur les informations de mémoire
Heureusement, ce ne sont pas des anecdotes inutiles sur le systÚme d'exploitation. Les informations réelles sur la consommation de mémoire m'ont aidé à plusieurs reprises à déboguer divers problÚmes.
La chose la plus importante est de trouver les parties
intactes de la mémoire allouée. L'échange de données est également important: cette mémoire est transférée, mais est rarement utilisée ou pas du tout utilisée.
MĂȘme si la mĂ©moire est parfois utilisĂ©e, il est important de comprendre qu'il s'agit d'une ressource coĂ»teuse, vous ne devez donc jamais emprunter un tel chemin. Des fuites de mĂ©moire apparaĂźtront ici.
Pour ces raisons, j'ai déjà entendu une suggestion de supprimer complÚtement le fichier d'échange et d'assimiler la mémoire allouée à l'ensemble de travail. Cependant, c'est une idée à double tranchant. Ensuite, le systÚme d'exploitation n'est pas en mesure de vider la mémoire en cas de mauvais fonctionnement des applications qui réservent parfois la mémoire en vain.