Powinieneś być w stanie to zrobić za pomocą standardu ps
dowództwo. Z man ps
:
%mem %MEM ratio of the process's resident set size to the physical
memory on the machine, expressed as a percentage.
rss RSS resident set size, the non-swapped physical memory that
a task has used (inkiloBytes).
vsz VSZ virtual memory size of the process in KiB (1024byte units).
Device mappings are currently excluded; this is subject
to change.
Jedyne inne szczegóły, których potrzebujesz to PID procesu. Jeśli więc Twoja aplikacja nazywa się myApp, możesz uzyskać PID w następujący sposób:
ps x | grep myApp
Który drukuje taką listę:
15909 pts/3 S 0:37 myApp
22583 pts/6 S+ 0:00 grep --color myApp
Pierwsza kolumna to identyfikator procesu (PID). Teraz, jeśli chcesz to zautomatyzować, musisz pominąć linię zawierającą polecenie grep i zapisać wynik w zmiennej BASH:
pid=$(ps x | grep myApp | grep -v grep | awk '{print $1}')
The awk
część powoduje, że polecenie drukuje tylko pierwsze pole, PID.
Możesz to wszystko połączyć w jedną linijkę, która co minutę zaoszczędzi pamięć twojej aplikacji w pliku o nazwie memlog.txt
:
while sleep 60; do \
pid=$(ps x | grep myApp | grep -v grep | awk '{print $1}') && \
ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt ; \
done
while sleep 60
powoduje, że bash działa w nieskończonej pętli, czekając na 60 sekund między pętlami
sleep 60
każe mu czekać 60 sekund. Zmień tę wartość, jeśli chcesz ją częściej aktualizować.
Wynikowym wynikiem jest plik ( memlog.txt
) z 4 kolumnami: PID twojej aplikacji, rozmiar zestawu rezydentnego, rozmiar pamięci wirtualnej i procent pamięci. Na przykład:
4166 25240 633028 0.3
4166 25240 633028 0.3
4166 25240 633028 0.3
Można to łatwo rozszerzyć o użycie procesora i czas dla każdego pomiaru. Na przykład, aby uwzględnić czas:
while sleep 60; do \
date=$(date +%D" "%H:%M:%S);
echo -n "$date : " >> memlog.txt;
pid=$(ps x | grep myApp | grep -v grep | awk '{print $1}') && \
ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt; \
done