Was bedeutet "gemeinsamer" Speicher im Befehl "frei"?

12

Die vierte Spalte in der Ausgabe von freeheißt shared . Bei den meisten Ausgängen, die ich im Internet sehen kann, ist der gemeinsam genutzte Speicher Null. Auf meinem Computer ist dies jedoch nicht der Fall:

$ free -h
          total        used        free      shared  buff/cache   available
Mem:       7,7G        3,8G        1,1G        611M        2,8G        3,0G
Swap:      3,8G          0B        3,8G

Hier ist auch ein Auszug aus der Ausgabe von ps_mem.py:

 Private  +   Shared  =  RAM used   Program
---------------------------------
 21.4 MiB +   1.0 MiB =  22.4 MiB   bash (9)
 29.2 MiB +   5.3 MiB =  34.5 MiB   Xorg
 35.9 MiB + 858.5 KiB =  36.7 MiB   tor
 42.9 MiB +   9.6 MiB =  52.5 MiB   urxvt (16)
121.0 MiB +  24.9 MiB = 145.8 MiB   okular (2)
151.8 MiB +   2.8 MiB = 154.6 MiB   soffice.bin
  3.7 GiB + 209.3 MiB =   4.0 GiB   chromium (39)
---------------------------------
                          4.6 GiB
=================================

Was bedeutet ein gemeinsamer Speicher?

Die Hauptantwort in der Frage 14102 lautet: geteilt: ein Konzept, das nicht mehr existiert. Es wird aus Gründen der Abwärtskompatibilität in der Ausgabe belassen . Sieht für mich unzureichend aus. Ein "nicht existierendes" Konzept benötigt nicht mehr als 600 MB RAM.

BertS
quelle
4
Mögliches Duplikat der tatsächlichen Speichernutzung
haben Sie versucht man free?
Archemar
Auf der Manpage von @Archemar heißt es: "geteilt: Speicher, der (meistens) von tmpfs verwendet wird (Shmem in / proc / meminfo)". Das ist nicht sehr klar; Ich hätte gerne eine ausführlichere Erklärung.
BertS

Antworten:

5

"Shared" in freeund "Shmem" in /proc/meminfozählen den gesamten vom tmpfs-Dateisystem (einem Dateisystem im Speicher) verwendeten Speicher sowie den gemeinsam genutzten Speicher (zugewiesen von shmget(2)). Dies ist unter https://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt dokumentiert .

Hier ist ein Beispiel von einem meiner Server:

$ free -k
              total        used        free      shared  buff/cache   available
Mem:      264036296     1275384   254696692     1182024     8064220   260536208
Swap:      63998972           0    63998972

$ grep Shmem /proc/meminfo
Shmem:           1182024 kB

$ df -BK | grep tmpfs
tmpfs        26403632K       51424K    26352208K   1% /run
tmpfs       132018148K         224K   132017924K   1% /dev/shm
tmpfs            5120K           4K        5116K   1% /run/lock
tmpfs       132018148K           0K   132018148K   0% /sys/fs/cgroup
tmpfs       251658240K     1129036K   250529204K   1% /run/shm
tmpfs        26403632K          24K    26403608K   1% /run/user/108
tmpfs        26403632K           0K    26403632K   0% /run/user/5800006

Wenn Sie die verwendete Größe (3. Spalte) aller von aufgelisteten tmpfs-Dateisysteme zusammenfassen df, werden Sie feststellen, dass die Summe gleich "shared" und "shmem" ist.

lqhl
quelle
Vielen Dank für die Erklärung, aber werden diese tmpfsbenötigt? Kann ich sie löschen und wenn möglich, wie lösche ich sie?. Ich bin auf dieses Problem viele Male gestoßen, nachdem ich das System aus dem Ruhezustand shared
geweckt habe
2
Hallo @KasunSiyambalapitiya. Shmem enthält auch GEM-Grafikpuffer gemäß Kernel- Quellkommentaren und Listen.kernelnewbies.org/pipermail/kernelnewbies/2013-July/… . Einige frühere Versionen von systemd hatten einen Fehler, der Grafikpuffer (ernsthaft) leckte, als der Grafikserver beendet wurde ... das war "lustig". unix.stackexchange.com/questions/431982/… . Dieses spezielle Problem kann nur auftreten, wenn Ihre gesamte grafische Sitzung abgestürzt ist oder wenn Sie sich absichtlich von Ihrer gesamten Sitzung abgemeldet haben (und wieder angemeldet haben).
Sourcejedi