Здесь есть очень хорошее подробное объяснение: https://blogs.kde.org/2005/09/15/measuring-memory-usage
Но по сути: вы должны действительно покопаться и понять, как настроено приложение.
Так, например, глядя на 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
Общий объем используемой памяти составляет около 25 МБ (возьмите 27 МБ RES и вычтите общее (SHR))
Я проверил это, проверив общее использование памяти (free -m, + / buffers / cache) до и после выдачи killall mysqld. После уничтожения всех процессов mysqld использование памяти сократилось на 25 МБ согласно «free -m».
Если вы видите, что у каждого процесса есть идентичные столбцы VIRT, RES и SHR, они, скорее всего, просто потоки одного и того же процесса. (Старые библиотеки Linux обрабатывали потоки, порождая несколько реальных процессов, которые по существу занимали одну и ту же память)
Если они отличаются, вы можете оценить это, выполнив СУММУ (RES - SHR). Но это работает, только если процессы на самом деле являются отдельными процессами, а не просто потоками одного и того же процесса. Просмотр PPID (ID родительского процесса) также помогает. Если у них у всех один и тот же родитель, они, вероятно, просто потоки (хотя и не обязательно).
К сожалению, в Linux нет действительно хорошего простого способа ответить на этот вопрос. Единственный простой способ - проверить «свободен» непосредственно перед прекращением процесса и проверить его снова сразу после. посмотрите на строку «- / + buffers / cache:» и посмотрите, насколько уменьшилось использование памяти, и это скажет вам, сколько она использовала.