web-dev-qa-db-fra.com

Est-il possible de formater PS RSS (Memory) Sortie d'être plus humain?

Exécuter ps ux Retourne une belle liste d'informations de processus, facile à grep via ou watch. Cependant, il ne semble pas y avoir beaucoup de flexibilité dans la production d'utilisation de la mémoire; Le RSS (taille du jeu de résident) est imprimé en KB, qui pour les processus importants est difficile à lire (surtout en un coup d'œil) et %MEM donne 100 × _ RSS/system_memory.

L'utilitaire du a une belle -h Drapeau qui imprime l'espace de manière plus conviviale. Je n'ai pas été capable de trouver quelque chose d'équivalent pour ps. Y a-t-il une astuce de formatage spéciale qui peut accomplir cela?

12
metasoarous
ps ux | numfmt --header --to=iec --field 5,6 --padding 6

Vous avez besoin de corutilles> = 8.25

Personnellement, je préfère celui-ci:

ps -eo pmem,comm,pid,maj_flt,min_flt,rss,vsz --sort -rss | numfmt --header --to=iec --field 4-5 | numfmt --header --from-unit=1024 --to=iec --field 6-7 | column -t | head
19
adrianlzt

Il semble qu'il n'y ait aucun drapeau approprié dans ps, vous devez donc utiliser un outil différent (je préfère personnellement htop) ou désordre avec ps Sortie un peu. Je suppose que vous voulez coller avec ps. Voici un sale petit script que j'ai fait comme exemple:

# get terminal width
WIDTH=`tput cols`
# pipe stdin to awk
cat | \
awk '\
BEGIN {
    # set output format
    CONVFMT="%.2f"
}
NR==1 {
    # search first line for columns that need to be converted from K to M
    for (i=1;i<=NF;i++) 
        # add condition for new columns if you want
        if ($i=="VSZ" || $i=="RSS") {
            # column numbers are stored in an array
            arr[i]=i; 
            $i = $i "(MB)"
        }
}
NR > 1 {
    # edit appropriate columns
    for (i in arr)
        $i=$i/1024; 
}
{
    # print every line
    print $0
}' | \
# format the output into columns and trim it to terminal width
column -t | cut -c 1-$WIDTH

Enregistrez-le dans un fichier, dites prettyps.sh, le rendre exécutable:

chmod + x prettyps.sh

et utiliser comme suit:

ps ux | /path/to/prettyps.sh

L'utilisation de ce script a l'inconvénient d'ajouter des processus supplémentaires à la sortie PS, mais il fonctionne néanmoins:

[.____] $ PS UX | ./prettyps.sh
USUser PID% CPU% cpu% (MB) RSS (MB) TTY STAT Démarrer la commande 
 Pono 2658 0,0 0,0 358.88 4.29? SL 02:33 0:00/USR/BIN/GNOME-KeyRing [.____] ... Sortie tronquée ... 
 Pono 4507 0.0 0.0 19.14 1.81 pts/1 s + 03:29 0:00 [.____] pono 4518 0.0 0.0 10.55 0,96 pts/1 s + 03:29 0:00 Page de pager [ SSL 04:10 0:24 /Opt/sublime_text/subl nom_f.]Pono 4742 0,1 0,4 339.05 25.80? SL 04:10 0:03/opt/sublime_text/plug
Pono 5177 0.0 0.0 19.23 1.32 pts/0 r + 05:05 0:00 ps 
 Pono 5178 0.0 0,0 4.34 0,61 pts/0 S + 05:05 0:00/bin/sh 

J'espère que cela vous aidera à trouver une manière qui vous convient.

5
Pono

Accessoires à @Adrianlxt! Ceci est mon nouvel alias "PSS":

ps -eo pid,pmem,rss,vsz,comm,command --sort -rss | numfmt --header --from-unit=1024 --to=iec --field 3-4 | awk '$3 != 0'

0
Ryan