First I would pickup the process with the smem
. For example, you could use smem -tas uss
to have an overview.
-t
... shows totals
-a
... auto adjusts the column width
-s uss
... sorts the result based on the uss column
To see details per process the best way is to use pmap
. To get detailed information you should use -X
switch. To get all information that kernel provides you can use -XX
which usually is an overkill.
To get a 2 seconds refresh monitoring for a pid 3120:
watch -n 2 pmap -X 3120
Edit: To actually get a peak The above helps in monitoring, but it does not show an actual peak. Slipped my mind.
I would personally use valgrind
with the massif
tool.
valgrind --tool=massif --page-as-heap=yes --massif-out-file=evolution_massif.out evolution; grep mem_heap_B evolution_massif.out | sed -e 's/mem_heap_B=\(.*\)/\1/' | sort -g | tail -n 1
Explanation:
--page-as-heap=yes
... tells massif that it should take all memory instead of just heap
--massif-out-file
... the output file for the massif tool
evolution ... the application that should be monitored
The next part is there to find out the maximum number recorded.
The grep
searches for mem_heap_B occurrences. sed
gets rid of the string mem_heap_B
so we get only numeric result. The we sort it via sort -g
which is generic numeric sort and take the biggest number with tail -n 1
which returns the first line of the sorted numbers.