Alors là je suis fier de mon jeu de mot. Vraiment, hein..
Bon bah juste une petite news de rien : on remarque souvent qu'avec ps
on a des résultats un peu chelous, voire parfois carrément aberrants, en terme
d'utilisation de la mémoire. Y'a plusieurs raisons à ça. On regarde
l'occupation mémoire d'un process via ps puis pmap :
$ ps -FC Thunar
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
poz 5426 5414 0 3409 4720 0 Aug26 ? 00:00:00 Thunar --sm-client-id 117f000101000118510838300000138390002 --daemon
Soit en gros 4M de RAM utilisée
$ pmap -d `pidof Thunar`
Address Kbytes Mode Offset Device Mapping
08048000 480 r-x-- 0000000000000000 008:00002 Thunar
080c0000 8 rw--- 0000000000077000 008:00002 Thunar
080c2000 260 rw--- 00000000080c2000 000:00000 [ anon ]
b727d000 64 r---- 0000000000000000 008:00002 Thunar.mo
b728d000 28 r---- 0000000000000000 008:00002 libexo-0.3.mo
[...]
b7eed000 100 r-x-- 0000000000000000 008:00001 ld-2.5.so
b7f06000 8 rw--- 0000000000019000 008:00001 ld-2.5.so
bff52000 84 rw--- 00000000bff52000 000:00000 [ stack ]
ffffe000 4 r-x-- 0000000000000000 000:00000 [ anon ]
mapped: 13640K writeable/private: 792K shared: 84K
$
On remarque que des segments de code sont comptés plusieurs fois (un segment
pour la lecture, un pour l'exec, avec recouvrement). Bref, ça confirme juste ce
qu'on sait déjà : ps se contente paresseusement d'afficher la quantité
théorique maximale de mémoire utilisée (avec certains bouts de code en double,
qui plus est), alors que les libs partagées sont pas exclusivement réservées à
ce process... Bref, la "vraie" mémoire est indiquée en bas de l'output,
"writeable/private: 792K".
$ cat > ~/bin/mem.sh
#!/bin/bash
function usage()
{
echo "Usage: $(basename $0) PROCESS..."
echo "display the (real) memory usage of processes"
}
if [ "$#" = "0" ]
then usage
exit 0
fi
OUT=
echo "memory usage:"
for i in $*
do
OUT=$(pidof $i | cut -d' ' -f1)
if [ "$OUT" = "" ]
then echo "[-] process '$i' does not exist"
else OUT2=$(pmap -d $OUT | grep private | awk '{print $4}')
echo "[+] ${i} (pid ${OUT}): $OUT2"
fi
done
^D
$ chmod +x ~/bin/mem.sh
$ shebang.sh ~/bin/mem.sh
$ mem.sh X firefox-bin ssh prout
memory usage:
[+] X (pid 4965): 415736K
[+] firefox-bin (pid 5582): 295068K
[+] ssh (pid 5580): 796K
[-] process 'prout' does not exist
$
Pour shebang.sh, cf. un commentaire
ailleurs :)
Je sais pas trop sur les *BSD si pmap est dispo... feedback ? Pfff,
3:05 du mat', je vais être frais au taff, encore.