Istnieje bardzo dobre szczegółowe wyjaśnienie tutaj: https://blogs.kde.org/2005/09/15/measuring-memory-usage
Ale w gruncie rzeczy: musisz się naprawdę zagłębić i zrozumieć, jak skonfigurowana jest aplikacja.
Na przykład patrząc na 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
Całkowita wykorzystana pamięć wynosi około 25 MB (weź 27 MB RES i odejmij współdzielone (SHR))
Sprawdziłem to, sprawdzając całkowite użycie pamięci (free -m, + / buffers / cache) przed i po wydaniu „killall mysqld”. Po zabiciu wszystkich procesów mysqld zużycie pamięci spadło o 25 MB zgodnie z „free-m”.
Jeśli zauważysz, że każdy proces ma identyczne kolumny VIRT, RES i SHR, prawdopodobnie są to tylko wątki tego samego procesu. (Starsze biblioteki Linuksa obsługiwały wątki poprzez tworzenie wielu rzeczywistych procesów, które zasadniczo zajmowały tę samą pamięć)
Jeśli są różne, możesz być w stanie to oszacować, wykonując SUMĘ (RES - SHR). Ale to działa tylko wtedy, gdy procesy są w rzeczywistości oddzielnymi procesami, a nie tylko wątkami tego samego procesu. Pomocne jest także spojrzenie na PPID (identyfikator procesu rodzica). Jeśli wszyscy mają tego samego rodzica, prawdopodobnie są to tylko wątki (choć niekoniecznie).
Niestety w Linuksie nie ma naprawdę dobrego, łatwego sposobu na rozwiązanie tego problemu. Jedynym łatwym sposobem jest sprawdzenie „darmowy” bezpośrednio przed zakończeniem procesu i sprawdzenie go ponownie natychmiast po nim. spójrz na wiersz „- / + buffers / cache:” i zobacz, jak bardzo zmniejszyło się użycie pamięci, a to powie ci, ile zużyło.