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.