Há uma explicação detalhada muito boa aqui: https://blogs.kde.org/2005/09/15/measuring-memory-usage
Mas essencialmente: você precisa realmente entender e entender como o aplicativo está configurado.
Então, por exemplo, olhando para o mysql:
PID PPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6004 16116 composit 20 0 37900 27m 2908 S 0 0.2 0:40.33 mysqld
16115 16085 composit 20 0 37900 27m 2908 S 0 0.2 0:00.37 mysqld
16116 16115 composit 20 0 37900 27m 2908 S 0 0.2 2:07.34 mysqld
16117 16116 composit 20 0 37900 27m 2908 S 0 0.2 0:00.00 mysqld
16118 16116 composit 20 0 37900 27m 2908 S 0 0.2 3:19.79 mysqld
16119 16116 composit 20 0 37900 27m 2908 S 0 0.2 0:00.01 mysqld
16120 16116 composit 20 0 37900 27m 2908 S 0 0.2 5:31.09 mysqld
16121 16116 composit 20 0 37900 27m 2908 S 0 0.2 14:19.53 mysqld
16122 16116 composit 20 0 37900 27m 2908 S 0 0.2 36:13.67 mysqld
16123 16116 composit 20 0 37900 27m 2908 S 0 0.2 30:30.64 mysqld
16124 16116 composit 20 0 37900 27m 2908 S 0 0.2 0:00.15 mysqld
16493 16116 composit 20 0 37900 27m 2908 S 0 0.2 0:00.00 mysqld
A memória total usada é de cerca de 25 MB (pegue o RES de 27 MB e subtraia o compartilhado (SHR))
Eu validei isso verificando o uso total de memória (free -m, + / buffers / cache) antes e depois de emitir um "killall mysqld". Após matar todos os processos do mysqld, o uso da memória caiu em 25 MB de acordo com "free -m".
Se você perceber que cada processo possui colunas VIRT, RES e SHR idênticas, provavelmente são apenas threads do mesmo processo. (As bibliotecas Linux mais antigas tratavam do encadeamento gerando vários processos reais que essencialmente ocupavam a mesma memória)
Se eles forem diferentes, você poderá estimar fazendo um SUM de (RES - SHR). Mas isso só funciona se os processos forem de fato processos separados e não apenas threads do mesmo processo. Olhar para o PPID (Parent Process ID) também ajuda. Se todos eles tiverem o mesmo pai, provavelmente serão apenas threads (embora não necessariamente).
Infelizmente, não existe uma maneira fácil e muito boa de responder isso no Linux. A única maneira fácil é verificar "livre" imediatamente antes de encerrar o processo e verificar novamente imediatamente depois. observe a linha "- / + buffers / cache:" e veja quanto uso de memória diminuiu e que lhe dirá quanto estava usando.