ps_mem – dokładny raport o użyciu pamięci

To pierwszy z serii wpisów przedstawiających przydatne narzędzia systemowe.
Dziś poznamy ps_mem – niewielki skrypt Python, za pomocą którego uzyskamy czytelny raport na temat zużycia pamięci przez programy.


Programik jest dostępny jako pakiet w repozytoriach większości dystrybucji, więc jego instalacja sprowadza się do wykonania komendy:

 yum install ps_mem #CentOS
apt install ps_mem #Debian/Ubuntu

Jeśli jednak nie mamy go w repozytoriach używanej dystrybucji możemy po prostu ściągnąć skrypt poleceniem:

wget https://github.com/pixelb/ps_mem/raw/master/ps_mem.py

i uruchomić:

python ps_mem.py

Skrypt prezentuje użycie pamięci w bardzo czytelnej formie z podziałem na programy.
Tu przykład uruchomienia ps_mem w kontenerze obsługującym stronę, którą czytasz.

# ps_mem
 Private  +   Shared  =  RAM used	Program

136.0 KiB + 147.5 KiB = 283.5 KiB	cron
500.0 KiB +  92.5 KiB = 592.5 KiB	memcached
440.0 KiB + 326.5 KiB = 766.5 KiB	agetty (3)
528.0 KiB + 363.5 KiB = 891.5 KiB	master
  1.0 MiB + 110.5 KiB =   1.1 MiB	systemd-udevd
916.0 KiB + 344.5 KiB =   1.2 MiB	dbus-daemon
564.0 KiB + 716.5 KiB =   1.3 MiB	pickup
656.0 KiB + 704.5 KiB =   1.3 MiB	qmgr
  1.4 MiB + 162.5 KiB =   1.5 MiB	rsyslogd
960.0 KiB + 600.5 KiB =   1.5 MiB	systemd-resolved
  1.0 MiB + 853.5 KiB =   1.8 MiB	(sd-pam)
  1.6 MiB + 631.5 KiB =   2.2 MiB	accounts-daemon
  2.0 MiB + 259.5 KiB =   2.3 MiB	systemd-logind [updated]
  2.0 MiB + 288.5 KiB =   2.3 MiB	systemd-networkd
  2.2 MiB + 144.5 KiB =   2.4 MiB	bash
  3.7 MiB +  56.5 KiB =   3.7 MiB	redis-server
  1.9 MiB +   3.4 MiB =   5.3 MiB	systemd (2)
  2.6 MiB +   2.9 MiB =   5.5 MiB	sshd (3)
  3.3 MiB +   2.5 MiB =   5.9 MiB	networkd-dispat
  5.7 MiB +   3.0 MiB =   8.7 MiB	unattended-upgr
 24.9 MiB +   1.5 MiB =  26.4 MiB	php-fpm7.3
 32.0 MiB +   4.8 MiB =  36.8 MiB	nginx (10)
 33.5 MiB +  18.1 MiB =  51.6 MiB	systemd-journald
105.1 MiB +   1.1 MiB = 106.2 MiB	mysqld
---------------------------------
                        271.4 MiB
=================================

Aby obserwować na bieżąco stan użycia pamięci możemy skorzystać z przełącznika -w, który umożliwia podanie interwału odświeżania w sekundach, np. co 3 sekundy.

ps_mem -w 3

… choć osobiście wolę używać do tego komendy watch

watch ps_mem

Inne przykłady:

Wyświetlenie statystyk dla procesów uruchomionych przez aktualnego użytkownika:

ps_mem -p $(pgrep -d, -u $USER)

Użycie pamięci wg użytkowników:

for i in $(ps -e -o user= | sort | uniq); do
  printf '%-20s%10s\n' $i $(sudo ps_mem --total -p $(pgrep -d, -u $i))
done
memcache               1336832
messagebus             1284608
mysql                113150464
postfix                2578432
redis                  5336576
root                 131549696
syslog                 1575424
systemd-network        2402816
systemd-resolve        1528320
www-data              36958720

Strona projektu na Github


Dodaj komentarz