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
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.
la source
top
,ps
et des programmes similaires sont tous concernés de la même manière.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:
la source
Liste des processus par utilisation de la mémoire
la source
ps -e -orss=,pid=,args= | sort -b -k1,1n
pour inclure l'ID de processusps
peut trier seul:ps -eo rss=,args= --sort +rss
vous pouvez utiliser
la source
Liste des processus par utilisation mem
commande: ps -e -orss =, args = | trier -b -k1,1n | pr -TW $ COLONNES \
la source
Mise à jour:
Le one-liner suivant fournit également des informations sur la consommation totale de mémoire par l'utilisateur actuel.
Je viens d'énumérer tous les processus utilisateur triés par utilisation de mémoire la plus élevée en Mo, comme ceci:
Vous pouvez utiliser
command=
au lieu decomm=
pour afficher le processus de chemin complet.Le
=
supprime simplement le titre de la colonne.la source
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
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.
la source