Comment puis-je afficher l'utilisation de la mémoire de chaque processus si je fais un «ps -ef»?


24

Sous Linux, comment afficher l'utilisation de la mémoire de chaque processus si je fais un ps -ef? J'aimerais voir la «mémoire virtuelle», la «mémoire res», la «mémoire partagée» de chaque progression. Je peux l'obtenir via top, mais je veux les mêmes informations ps -efafin de pouvoir diriger la sortie grepavec mon nom de processus.

Réponses:


8

Obtenir l'utilisation de la mémoire via ps n'est pas très fiable. Si vous avez un noyau plus récent, il devrait prendre en charge / proc / pid # / smaps qui vous donne des informations détaillées sur l'utilisation de la mémoire de chaque processus. Vous trouverez ci-dessous un script assez sale et rapide pour parcourir chaque processus ouvert et saisir l'utilisation de Size, Rss, Pss et Shared Clean / Dirty. J'espère que cela peut être utile d'une manière ou d'une autre.

#!/bin/bash

for pid in $(ps -ef | awk '{print $2}'); do
    if [ -f /proc/$pid/smaps ]; then
            echo "* Mem usage for PID $pid"
            echo "-- Size:"
            cat /proc/$pid/smaps | grep -m 1 -e ^Size: | awk '{print $2}'
            echo "-- Rss:"
            cat /proc/$pid/smaps | grep -m 1 -e ^Rss: | awk '{print $2}'
            echo "-- Pss:"
            cat /proc/$pid/smaps | grep -m 1 -e ^Pss: | awk '{print $2}'
            echo "Shared Clean"
            cat /proc/$pid/smaps | grep -m 1 -e '^Shared_Clean:' | awk '{print $2}'
            echo "Shared Dirty"
            cat /proc/$pid/smaps | grep -m 1 -e '^Shared Dirty:' | awk '{print $2}'
    fi
done

1
Vous devez additionner la colonne Taille. Voir la réponse d'Ezsmith ci-dessous.
Basil A

11

ps ef -o command,vsize,rss,%mem,size

Je n'ai pas pu trouver d'option pour la mémoire partagée, mais j'ai trouvé des options pour% de la mémoire physique totale et la quantité d'espace de swap qui serait nécessaire pour échanger le processus. Ceci et bien plus est documenté dans la page de manuel de ps.


Linux représente la mémoire partagée dans la mémoire de chaque processus, ce qui peut conduire à de fausses sommes si vous avez beaucoup de processus attachés à un segment de mémoire partagée plus large. top, pset des programmes similaires sont tous concernés de la même manière.
Peter Eisentraut

Je sais comment fonctionne la mémoire partagée, mais il semble que ps ne puisse pas fournir ces informations (ou je n'ai pas pu les trouver dans ma documentation ps, au moins). top ou htop peuvent en fait afficher l'utilisation de la mémoire partagée par processus.
Justin Smith

9

La réponse de @ user26528 ne calcule pas tout à fait correctement la mémoire - vous avez besoin de la somme des mappages en smaps, pas seulement celle du haut. Ce script devrait le faire:

#!/bin/bash

for pid in $(ps -ef | awk '{print $2}'); do
    if [ -f /proc/$pid/smaps ]; then
        echo "* Mem usage for PID $pid"     
        rss=$(awk 'BEGIN {i=0} /^Rss/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        pss=$(awk 'BEGIN {i=0} /^Pss/ {i = i + $2 + 0.5} END {print i}' /proc/$pid/smaps)
        sc=$(awk 'BEGIN {i=0} /^Shared_Clean/ {i = i + $2} END {print i}' /proc/$pid/smaps)            
        sd=$(awk 'BEGIN {i=0} /^Shared_Dirty/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        pc=$(awk 'BEGIN {i=0} /^Private_Clean/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        pd=$(awk 'BEGIN {i=0} /^Private_Dirty/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        echo "-- Rss: $rss kB" 
        echo "-- Pss: $pss kB"
        echo "Shared Clean $sc kB"
        echo "Shared Dirty $sd kB"
        echo "Private $(($pd + $pc)) kB"
    fi
done

Sorties: ligne 16: +: erreur de syntaxe: opérande attendu (le jeton d'erreur est "+") qui est la ligne qui contient: echo "Private $ (($ pd + $ pc)) kB", je cours sur CentOS 7 .
basilic

2
@evsmith pourquoi ajouter 0,5 à Pss?
Pete

1
L'exécution de 10 000 petits scripts Awk est un contre-modèle massif, vous devez simplement refactoriser tout cela en un seul script Awk.
tripleee

mais ce script lui-même consomme trop de mémoire
mehmet riza oz

8

Liste des processus par utilisation de la mémoire

ps -e -orss =, args = | trier -b -k1,1n


Utilisez ps -e -orss=,pid=,args= | sort -b -k1,1npour inclure l'ID de processus
Jacob

pspeut trier seul:ps -eo rss=,args= --sort +rss
phil294


3

Liste des processus par utilisation mem

commande: ps -e -orss =, args = | trier -b -k1,1n | pr -TW $ COLONNES \


3

Mise à jour:

Le one-liner suivant fournit également des informations sur la consommation totale de mémoire par l'utilisateur actuel.

echo "------------------------------------" && mem=0 && while read -r rss comm ; do mbs=$((rss/1024)); mem=$((mbs + mem)); echo $mbs"MB - $comm"; done <<< "$(ps -u $USER -wo rss=,comm= --sort -rss)" && echo "------------------------------------" && echo $mem"MB: Memory used by user '$USER'"

Je viens d'énumérer tous les processus utilisateur triés par utilisation de mémoire la plus élevée en Mo, comme ceci:

ps -u $USER -wo rss=,comm= --sort -rss | while read -r rss comm ; do echo $((rss/1024))"MB -" $comm; done

Vous pouvez utiliser command=au lieu de comm=pour afficher le processus de chemin complet.

Le =supprime simplement le titre de la colonne.


3

J'ai constaté que plusieurs fois le même processus a un sous-processus fork et vous êtes intéressé par la mémoire totale utilisée par le processus. Par exemple, Google Chrome démarre plusieurs processus et vous souhaitez connaître la mémoire totale prise par Chrome. J'ai trouvé ci-dessous une commande de ligne très utile

echo "%CPU   %MEM    MEM     PROCESS"
ps aux | awk '{mem[$11]+=int($6/1024)}; {cpuper[$11]+=$3};{memper[$11]+=$4}; END {for (i in mem) {print cpuper[i]"% ",memper[i]"% ",mem[i]" MB ",i}}' | sort -k3nr | head -n 5

Il prend en charge de nombreuses choses, comme l'affichage de la mémoire en Mo, le tri sur la mémoire et principalement le regroupement par commande. Il regroupe également% CPU et% mémoire. Il affiche les données dans un format convivial.

Cette commande a été inspirée de cette réponse et elle m'a beaucoup aidé à me faire une idée du processus qui utilise mes ressources.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.