Cum aflu câtă memorie consumă fiecare aplicație
Dec. 6, 2018, 11:47 a.m. osx bash linux centos
De când cu AWS, Azure, Digital Ocean, Webfaction mult mai mulți utilizatori cu ceva experiență în IT preferă să aibă propriul server la un "cloud provider", în defavoarea hosting-ului clasic cu access cpanel.
Mai ales dacă avem un "shared server" este de bun simț să monitorizăm resursele. Multă lume folosește free
, top
sau și mai tare htop
, însă pe un shared server valorile afișate se referă la toți utilizatorii care își împart colegial resursele.
Așa că multă lume se întreabă: "Cum aflu câtă memorie consumă fiecare aplicație?"
Deschide o sesiune terminal, iTerm sau putty și încearcă opțiunea rss
a comenzii ps
.
De exemplu:
[gigi@web555 myLogs]$ ps -u gigi -o rss,command
RSS COMMAND
4136 /usr/pgsql-9.4/bin/postgres -D /home/gigi/webapps/margareta/data
620 postgres: logger process
4668 postgres: checkpointer process
940 postgres: writer process
1460 postgres: wal writer process
1684 postgres: autovacuum launcher process
1068 postgres: stats collector process
1204 /bin/sh -c ~/myApps/filebeat-6.5.1/filebeat -c /home/gigi/myApps
30684 /home/gigi/myApps/filebeat/filebeat -c /home/gigi/myA
30544 /home/gigi/myApps/filebeat/filebeat -c /home/gigi/myA
2224 /home/gigi/webapps/decebal/apache2/bin/httpd.worker -f /home/gigi/webapp
4960 /home/gigi/webapps/decebal/apache2/bin/httpd.worker -f /home/gigi/webapp
43736 /home/gigi/webapps/decebal/apache2/bin/httpd.worker -f /home/gigi/webapp
876 /usr/sbin/sendmail -FCronDaemon -i -odi -oem -oi -t -f gigi
1620 ps -u gigi -o rss,command
Vedem de exemplu un server postgresql pe nume margareta, un server apache2 pe nume decebal, șamd. În prima coloană putem vedea câtă memorie ocupă fiecare.
Ok, ok dar dacă vreau totuși să știu căt folosesc în total din acel 1GB RAM alocat serverului meu? Păi atunci să folosim bc
și să facem totalul:
[gigi@web555 myLogs]$ ps -u gigi -o rss | grep -v RSS |paste -sd+ | bc
696272
Deci toate procesele care rulează pentru utilizatorul gigi însumează 696272 kB
. Dacă vrem însă o formatare mai drăguță putem folosi numfmt
, citește aici mai multe despre numfmt:
[gigi@web555 myLogs]$ ps -u gigi -o rss | grep -v RSS |paste -sd+ | bc | numfmt --from-unit=1024 --to=iec
681M
Dacă tot ești aici încearcă rapid și o buclă (habar nu am cum se traduce while loop în română, cred că trebuie să caut niște cărți sau cursuri de la Poli să mă pun la curent) care să verifice memoria utilizată din 5 in 5 secunde:
[gigi@web555 myLogs]$ while true; do ps -u gigi -o rss | grep -v RSS |paste -sd+ | bc | numfmt --from-unit=1024 --to=iec; sleep 5; done
689M
689M
689M
^C
Sau și mai bine, când pleci în pauza de prânz direcționează rezultatul către cat
și către un fișier pe disc (da, se poate și mai scurt dar riscăm să nu mai fie citibil ce introducem în linia de comandă) fișier care îl putem monitoriza folosind tail -f
și pe care îl poți analiza ulterior mai ușor (pentru asta am introdus și date
, dar și echo -n
ca să îți apară frumos totul pe o linie ;-) ).
[gigi@web555 myLogs]$ while true; do ps -u gigi -o rss | grep -v RSS |paste -sd+ | bc | numfmt --from-unit=1024 --to=iec; sleep 5; done | cat > testRSS.out
^Z
[1]+ Stopped while true; do
ps -u gigi -o rss | grep --color=auto -v RSS | paste -sd+ | bc | numfmt --from-unit=1024 --to=iec; sleep 5;
done | cat > testRSS.out
[gigi@web555 myLogs]$ bg
...skipping...
[1]+ while true; do
ps -u gigi -o rss | grep --color=auto -v RSS | paste -sd+ | bc | numfmt --from-unit=1024 --to=iec; sleep 5;
done | cat > testRSS.out &
[gigi@web555 myLogs]$
[gigi@web555 myLogs]$ tail -f testRSS.out
688M
688M
688M
689M
^C
[gigi@web555 myLogs]$ while true; do date; ps -u gigi -o rss | grep -v RSS |paste -sd+ | bc | numfmt --from-unit=1024 --to=iec; sleep 5; done
Thu Dec 6 12:53:38 UTC 2018
687M
Thu Dec 6 12:53:43 UTC 2018
687M
^C
[gigi@web555 myLogs]$ while true; do echo -n `date`; ps -u gigi -o rss | grep -v RSS |paste -sd+ | bc | numfmt --from-unit=1024 --to=iec; sleep 5; done
Thu Dec 6 12:54:40 UTC 2018687M
^C
[gigi@web555 myLogs]$ while true; do echo -n `date`" " ; ps -u gigi -o rss | grep -v RSS |paste -sd+ | bc | numfmt --from-unit=1024 --to=iec; sleep 5; done
Thu Dec 6 13:01:22 UTC 2018 688M
Thu Dec 6 13:01:27 UTC 2018 688M
Thu Dec 6 13:01:32 UTC 2018 688M
^C
Nota bene:
Am folosit CTRL+z ca să "înghețăm" și apoi bg
- ca să trimitem un task/comandă în "background". E bine să mai facem un jobs
din când în când, pentru a vedea ce am trimis să ruleze "în spate" în sesiunea actuală de terminal.
Când ne plictisim facem fg
ca să readucem în prim plan procesul respectiv (asta dacă avem un singur task în bg
, iar dacă nu, atunci fg 1
pentru primul "job" din listă, fg 2
pentru al doilea, șamd; mai multă documentare există însă și google :-) ), pentru ca apoi să îl exterminăm cu CTRL+c:
[gigi@web555 myLogs]$ jobs
[1]+ Running while true; do
ps -u gigi -o rss | grep --color=auto -v RSS | paste -sd+ | bc | numfmt --from-unit=1024 --to=iec; sleep 5;
done | cat > testRSS.out &
[gigi@web555 myLogs]$ fg
while true; do
ps -u gigi -o rss | grep --color=auto -v RSS | paste -sd+ | bc | numfmt --from-unit=1024 --to=iec; sleep 5;
done | cat > testRSS.out
^C
Am pornit de la 3 rânduri și am ajuns la ditamai pagina. Mă opresc aici.
Pentru observații, păreri, sfaturi lăsați un comentariu mai jos. O zi bună