Aquí hay una muy buena explicación detallada: https://blogs.kde.org/2005/09/15/measuring-memory-usage
Pero esencialmente: tienes que profundizar y comprender cómo está configurada la aplicación.
Entonces, por ejemplo, mirando 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
La memoria total utilizada es de aproximadamente 25 MB (Tome la RES de 27 MB y reste la compartida (SHR))
Validé esto comprobando el uso total de memoria (free -m, + / buffers / cache) antes y después de emitir un "killall mysqld". Después de eliminar todos los procesos de mysqld, el uso de memoria se redujo en 25 MB según "free -m".
Si ve que cada proceso tiene columnas VIRT, RES y SHR idénticas, es probable que solo sean hilos del mismo proceso. (Las bibliotecas antiguas de Linux manejaban el subproceso generando múltiples procesos reales que esencialmente ocupaban la misma memoria)
Si son diferentes, puede estimarlo haciendo una SUMA de (RES - SHR). Pero eso solo funciona si los procesos son de hecho procesos separados y no solo hilos del mismo proceso. Mirar el PPID (ID del proceso principal) también ayuda. Si todos tienen el mismo padre, probablemente sean solo hilos (aunque no necesariamente).
Desafortunadamente, no hay una forma fácil y buena de responder esto en Linux. La única forma fácil es marcar "gratis" inmediatamente antes de finalizar el proceso y volver a verificarlo inmediatamente después. mire la línea "- / + buffers / cache:" y vea cuánto disminuyó el uso de memoria y eso le dirá cuánto estaba usando.