5 votes

Obtenir l'utilisation du swap pour un processus

Je cherche un moyen, à partir d'un script shell, d'obtenir l'utilisation du swap pour un processus particulier. Top peut afficher ces informations, mais seulement en mode interactif. Le mode batch n'affichera les personnalisations que lorsqu'un fichier .toprc est présent, mais vous ne pouvez pas spécifier un .toprc spécifique en ligne de commande. J'ai trouvé ce script, mais il n'y a pas d'entrées de swap dans /proc/*/smaps sur mon serveur :

# find /proc/ -maxdepth 1 -type d -regex '^/proc/[0-9]+$' -exec grep -Hi swap '{}'/smaps \;
#

donc le script renvoie simplement 0 pour chaque processus.

Existe-t-il un moyen de trouver ces informations? Je suis sur RHEL5.1 2.6.18-53.el5 x86_64.

Modifier :

Pour être clair, lorsque je parle d'"utilisation du swap", je veux dire la quantité de mémoire utilisée par un processus qui a été paginé vers le système de fichiers swap (ce qui ne se trouve actuellement pas dans la mémoire principale). En supposant qu'il n'y ait pas de meilleure solution, je vais définir par défaut le calcul avec (virtual - rss) via les valeurs de ps -o vsz,rss.

0 votes

Eh bien, attends une seconde - est-ce que tu dis qu'il n'y a pas d'entrées, c'est-à-dire qu'il affiche une ligne vide et c'est tout? Ou est-ce que tu vois Swap: 0 kB? Parce que cela signifie qu'ils ne sont pas échangés - ce qui est un état valide. Si tu t'attends à ce que les choses soient échangées, quel mécanisme utilises-tu pour le découvrir?

0 votes

Je veux dire qu'il n'y a pas d'entrées. S'il y avait des entrées, alors la commande find dans ma question aurait affiché 'Swap: 0'. Rien n'est affiché; il n'y a pas du tout d'entrées "Swap:" dans /proc.

0 votes

Votre question dit : donc il sort simplement 0 pour chaque processus, je voulais juste vérifier. Vous voudrez peut-être mettre à jour votre question pour préciser qu'elle ne produit rien.

3voto

rmistero Points 1

Une question intéressante qui m'a fait réfléchir pendant un moment.

Premièrement, pourquoi vous n'avez pas de ligne d'échange: bien que théoriquement cela ait été ajouté dans le noyau 2.6.16, cela n'est pas apparu dans RHEL avant 5.3 environ (noyau 2.6.18-99.el5). Voici le commit (malheureusement non accessible dans le Bugzilla de RH; si vous avez un compte avec les privilèges appropriés, l'identifiant Bugzilla est 443749). http://sophie2.aero.jussieu.fr/distrib/Scientific%20Linux/5x/i386/by-pkgid/351d529f9beeb4e5d936a6d5e3e7813a/files/645

Deuxièmement, cela implique que les données supérieures sont peu fiables car elles ne proviennent pas des smaps (c'est-à-dire virt - res):

    case P_SWP:
       MKCOL(scale_num(PAGES_TO_KB(p->size - p->resident), w, s));

Troisièmement, je regrette de dire que le noyau est le seul vrai Oracle pour savoir combien de mémoire swap est utilisée, et autant que je sache les divers correctifs pour rendre l'information disponible dans les smaps et le statut sont la seule façon d'exposer cette information. Malheureusement, je vois la mise à jour de votre noyau comme la seule façon d'obtenir des informations précises; soit en patchant vous-même la source (patch d'exemple, sans garantie) ou en mettant à jour vers le noyau 2.6.18-99.el5.

J'aimerais qu'il y ait une réponse plus facile; blâmez Linus.

0 votes

Soupir, comme je le redoutais. merci pour tes efforts, cependant. +1 pour la meilleure source.

1voto

David Schwartz Points 31009

Regardez dans /proc//status. Vous verrez une ligne VmSwap.

0 votes

Il n'y a pas de telles entrées dans mes fichiers /proc/*/status (vérifié avec find /proc/ -maxdepth 1 -type d -regex '^/proc/[0-9]+$' -exec grep -Hi swap '{}'/status \;). Manquant tout comme les entrées swap qui devraient être dans /proc/*/smaps.

0 votes

Est-ce une machine virtuelle ? Si c'est le cas, elle peut ne pas avoir de "swap", seule la machine physique en a. (Il serait inefficace pour une machine virtuelle de simuler un échange sur un fichier de pagination virtuel alors que la machine physique peut gérer la mémoire comme un seul grand pool et éviter de devoir le faire.)

0 votes

Non, hôte physique. dans tous les cas, le rapport indiquerait-il une utilisation du swap même s'il n'y avait pas de swap ?

-2voto

Luka Marinko Points 1184

Il semble que d'après la page de manuel ps(1) pour CentOS 5(1), vous pouvez spécifier vsize(VSZ) en tant que champ de sortie, donc quelque chose comme :

/bin/ps -p $pid -o vsize=

ferait l'affaire pour vous ? Cela extrait la "taille de la mémoire virtuelle du processus en Kio (unités de 1024 octets)" et le = permet de ne pas afficher l'en-tête de colonne.

1 votes

La mémoire virtuelle n'est pas la même que la mémoire échangée. Certains disent que (virtuel - rss =~ swap), mais je me souviens avoir lu quelque part que ce calcul est inexact (pour les normes de statistiques de mémoire Linux). Utiliser (virtuel - rss) est une solution de secours pour moi en ce moment.

0 votes

Il cherche à savoir l'utilisation du swap, non la taille de la mémoire virtuelle.

0 votes

D'accord, il semble que vous avez déjà essayé cette technique. Merci pour votre réponse réfléchie et désolé de n'avoir pas été plus utile.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X