Hier finden Sie eine sehr gute ausführliche Erklärung: https://blogs.kde.org/2005/09/15/measuring-memory-usage
Aber im Wesentlichen: Sie müssen wirklich verstehen, wie die Anwendung eingerichtet ist.
Schauen Sie sich zum Beispiel MySQL an:
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
Der insgesamt verwendete Speicher beträgt ca. 25 MB (Nehmen Sie die 27 MB RES und subtrahieren Sie die gemeinsam genutzte (SHR))
Ich habe dies überprüft, indem ich die gesamte Speichernutzung (frei -m, + / Puffer / Cache) vor und nach der Ausgabe eines "killall mysqld" überprüft habe. Nachdem alle mysqld-Prozesse beendet wurden, sank die Speichernutzung laut "free -m" um 25 MB.
Wenn Sie sehen, dass jeder Prozess identische VIRT-, RES- und SHR-Spalten hat, handelt es sich wahrscheinlich nur um Threads desselben Prozesses. (Ältere Linux-Bibliotheken handhabten das Threading, indem sie mehrere reale Prozesse erzeugten, die im Wesentlichen denselben Speicher belegten.)
Wenn sie unterschiedlich sind, können Sie sie möglicherweise durch eine SUMME von (RES - SHR) abschätzen. Dies funktioniert jedoch nur, wenn die Prozesse tatsächlich separate Prozesse sind und nicht nur Threads desselben Prozesses. Ein Blick auf die PPID (Parent Process ID) hilft ebenfalls. Wenn sie alle das gleiche Elternteil haben, sind sie wahrscheinlich nur Threads (obwohl nicht unbedingt).
Leider gibt es unter Linux keine wirklich gute und einfache Möglichkeit, dies zu beantworten. Die einzige einfache Möglichkeit besteht darin, "frei" unmittelbar vor Beendigung des Vorgangs zu überprüfen und unmittelbar danach erneut zu überprüfen. Sehen Sie sich die Zeile "- / + Puffer / Cache:" an und sehen Sie, wie viel Speicher belegt wurde. Daraufhin wird angezeigt, wie viel Speicher verwendet wurde.