Comment savoir si mon serveur Windows échange?

29

J'utilise Process Explorer pour surveiller mon serveur Windows pendant qu'il reconstruit certaines données. C'est principalement un processus gourmand en CPU, mais je veux m'assurer qu'il ne change pas. Comment savoir s'il utilise Process Explorer? Ma première supposition est dans la fenêtre Informations système, c'est Delta d'écriture de fichier d'échange. Oui? Non? Je suis un idiot?

* La capture d'écran n'est pas du serveur ... juste un exemple.

texte de remplacement http://www.malwareinfo.org/bootcamp/img/ProcessExplorer2.jpg

churnd
la source

Réponses:

30

"Pages Input / sec est le compteur à surveiller, mais vous ne devriez pas vous en préoccuper" swapping "car Windows n'utilise pas le fichier d'échange comme * nixes.

Vous devez d'abord comprendre que les pages Windows ne sont pas fermées. Je vais citer la partie pertinente du billet de blog d' Eric Lipperts (légèrement édité) car je ne peux pas le dire mieux moi-même:

"La RAM peut être considérée comme une simple optimisation des performances. L'accès aux données dans la RAM, où les informations sont stockées dans des champs électriques qui se propagent à une vitesse proche de la vitesse de la lumière, est beaucoup plus rapide que l'accès aux données sur disque, où les informations sont stockées dans d'énormes et lourds molécules de métaux ferreux

Le système d'exploitation garde une trace des pages de stockage à partir desquelles les processus sont consultés le plus fréquemment et en fait une copie dans la RAM pour obtenir une augmentation de la vitesse. Lorsqu'un processus accède à un pointeur correspondant à une page qui n'est pas actuellement mise en cache dans la RAM, le système d'exploitation fait un «défaut de page», sort sur le disque et fait une copie de la page du disque vers la RAM, faisant l'hypothèse raisonnable qu'il est sur le point d'être consulté à nouveau très bientôt.

Le système d'exploitation est également très intelligent pour partager des ressources en lecture seule. Si deux processus chargent tous les deux la même page de code à partir de la même DLL, le système d'exploitation peut partager le cache RAM entre les deux processus. Étant donné que le code ne sera probablement pas modifié par l'un ou l'autre processus, il est parfaitement judicieux d'enregistrer la page de RAM en double en la partageant.

Mais même avec un partage intelligent, ce système de mise en cache finira par manquer de RAM. Lorsque cela se produit, le système d'exploitation fait une supposition sur les pages les moins susceptibles d'être consultées à nouveau bientôt, les écrit sur le disque si elles ont changé et libère de la RAM pour lire quelque chose qui est plus susceptible d'être consulté à nouveau. bientôt.

Lorsque le système d'exploitation devine de manière incorrecte, ou, plus probablement, lorsqu'il n'y a tout simplement pas assez de RAM pour stocker toutes les pages fréquemment consultées dans tous les processus en cours d'exécution, la machine commence alors à «vider». Le système d'exploitation passe tout son temps à écrire et à lire le stockage sur disque coûteux, le disque fonctionne en permanence et vous ne faites aucun travail.

Cela signifie également que «manquer de RAM» entraîne rarement une erreur de «mémoire insuffisante». Au lieu d'une erreur, il en résulte de mauvaises performances car le coût total du fait que le stockage est réellement sur le disque devient soudainement pertinent.

Une autre façon de voir les choses est que la quantité totale de mémoire virtuelle consommée par votre programme n'est vraiment pas très pertinente pour ses performances. Ce qui est pertinent n'est pas la quantité totale de mémoire virtuelle consommée, mais plutôt (1) la quantité de cette mémoire qui n'est pas partagée avec d'autres processus, (2) la taille du «jeu de travail» des pages couramment utilisées, et ( 3) si les ensembles de travail de tous les processus actifs sont plus grands que la RAM disponible.

À présent, il devrait être clair pourquoi les erreurs de «mémoire insuffisante» n'ont généralement rien à voir avec la quantité de mémoire physique dont vous disposez, ni même la quantité de stockage disponible. Il s'agit presque toujours de l'espace d'adressage, qui sur Windows 32 bits est relativement petit et facilement fragmenté. "

Quelques points supplémentaires:

  1. les dll et les fichiers de programme sont toujours uniquement paginés, jamais sortis car ils sont déjà sur le disque (et généralement les premières pages libérées lorsque le ram physique devient faible)
  2. vous êtes beaucoup plus susceptible de manquer d'entrées de table de pages gratuites ou d'avoir une mémoire fortement frustrée que tout autre problème de mémoire (autre que les mauvaises performances globales comme déjà mentionné
  3. même si vous exécutez sans fichier de page, vous pouvez toujours obtenir des défauts de page
  4. de manière générale, regarder la mémoire engagée est plus révélateur de la façon dont un processus utilise la mémoire

pour une image complète du fonctionnement de la gestion de la mémoire dans Windows, voir

Le gestionnaire de mémoire virtuelle dans Windows NT

si vous pensez que vous avez un problème de mémoire, je vous suggère d'abord de regarder cette présentation sur le dépannage de la mémoire Windows

Voici une excellente explication de la raison pour laquelle parfois vous "manquez de mémoire" lorsque vous ne l'êtes pas grâce à la fragmentation de la mémoire:

Voir aussi Repousser les limites de Windows: mémoire physique

Plus d'informations sur la mémoire virtuelle, la fragmentation de la mémoire et les fuites, et WOW64

RAM, mémoire virtuelle, fichier d'échange et tout le reste (prise en charge de Microsoft)

Mise à jour:

Windows 10 fait quelque chose d'un peu différent avec la mémoire et, au fil du temps, vous verrez un processus appelé "Système et mémoire compressée" Windows 10 ajoute un "magasin de compression" à la liste de pagination. Ce bélier est la mémoire UTILISATEUR qui appartient au système (généralement, le système n'avait que la mémoire du noyau). Cette mémoire est compressée en place pour une réduction moyenne d'environ 30%. Cela permet à plus de pages d'être stockées en mémoire (pour ceux d'entre vous qui font les calculs, c'est 70% d'espace en plus). liste (compressée) qui peut ensuite être écrite dans le fichier d'échange physique. Le système verra qu'ils proviennent de l'espace du mode utilisateur du système et sont compressés et n'essaiera pas de les remettre dans le magasin. Ainsi, sur les systèmes Windows 10, il peut sembler que le système inhale du RAM, mais en fait, il essaie simplement d'être plus efficace dans l'utilisation de RAM. Les utilisateurs de Mac utilisent une fonctionnalité similaire depuis 2013 et les nouvelles versions du noyau Linux utilisent une version de compression de la mémoire. Cette méthode de conservation de la mémoire est non seulement meilleure, mais déjà courante parmi les autres systèmes d'exploitation.

Jim B
la source
6

Oui, les deltas de pagination vous donneraient une indication en direct de la quantité de pagination du serveur (ou «échange»), mais seulement à ce moment. Pour regarder cela de plus près et pour voir une vue historique, je suggère d'utiliser l' Analyseur de performances ( perfmon.exe ) pour tracer ou enregistrer ces deltas (et tout autre compteur de performances d'intérêt pouvant aider à corréler des événements ou activités spécifiques avec des pics dans activité de pagination).

Jessica McKinnon
la source
5

Performance Monitor (perfmon) est votre ami ici. Vous recherchez des erreurs de page matérielle (c'est-à-dire des erreurs de page lorsque la page mémoire nécessaire pour répondre à la demande doit être lue à partir du disque), donc la surveillance des erreurs de page matérielle et logicielle n'est pas optimale.

Regardez le compteur "Pages Input / sec" dans l'objet "Memory" en utilisant perfmon pour avoir une idée du nombre de défauts de page durs qui se produisent.

Evan Anderson
la source
0

Une bonne règle de base est que si vos frais de validation sont supérieurs à votre mémoire physique, vous paginez certainement quelque chose , mais si votre application utilise un seul tampon de données fixe qui est toujours maintenu en service, il ne sera généralement pas paginé du tout. Il peut y avoir un certain retard au démarrage tandis que d'autres mémoires sont paginées pour faire de la place pour cela.

Maximus Minimus
la source
3
mh: Je ne suis pas sûr d'être d'accord avec votre règle d'or. Si la charge de validation est supérieure à la mémoire physique, cela signifie simplement que quelque chose a été paginé à un moment donné, mais le système ne pagine toujours pas nécessairement. Quelque chose ne sera paginé qu'en cas de défaillance d'une page. Sinon, je conviens que l'utilisation d'un seul tampon de données fixe serait préférable, mais je pense que nous entrons probablement dans le domaine de stackoverflow.com
Jessica McKinnon
Mon mauvais, j'aurais dû dire "quelque chose a été échangé dans le passé, et les futures demandes de mémoire nécessiteront également un échange".
Maximus Minimus
Ce n'est pas nécessairement vrai qu'une application ne peut verrouiller que des pages en mémoire qui a ce privilège OS.
Jim B