Jakie jest znaczenie pamięci „współdzielonej” w poleceniu „wolny”?

12

Czwarta kolumna w danych wyjściowych freenosi nazwę shared . Na większości wyjść, które widzę w Internecie, pamięć współdzielona wynosi zero. Ale tak nie jest na moim komputerze:

$ 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

Oto także fragment wyników 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
=================================

Jakie jest znaczenie wspólnej pamięci?

Główna odpowiedź w pytaniu 14102 brzmi: wspólne: koncepcja, która już nie istnieje. Zostaje na wyjściu dla kompatybilności wstecznej . Wygląda mi na niewystarczającą. „Nieistniejąca” koncepcja nie wymaga ponad 600 MB pamięci RAM.

BertS
źródło
4
Możliwy duplikat rzeczywistego użycia pamięci
próbowałeś man free?
Archemar
@Archemar manpage mówi: „współużytkowane: pamięć używana (głównie) przez tmpfs (Shmem w / proc / meminfo)”. To nie jest bardzo jasne; Chciałbym bardziej szczegółowego wyjaśnienia.
BertS

Odpowiedzi:

5

„Shared” in freei „Shmem” in /proc/meminfoliczą całą pamięć używaną przez system plików tmpfs (system plików w pamięci), a także pamięć współdzieloną (przydzielaną przez shmget(2)). Jest to udokumentowane w https://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt .

Oto przykład z jednego z moich serwerów:

$ 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

Jeśli zsumujesz używany rozmiar (trzecia kolumna) wszystkich systemów plików tmpfs wymienionych przez df, okaże się, że suma jest równa „współużytkowanemu” i „shmem”.

lqhl
źródło
Dziękujemy za wyjaśnienie, ale czy są tmpfsone potrzebne. Czy mogę je usunąć i, jeśli to możliwe, jak je usunąć ?. Problem ten napotykałem wiele razy po przebudzeniu systemu ze stanu hibernacji (około 4 GB zajmuje shared)
Kasun Siyambalapitiya,
2
Cześć @KasunSiyambalapitiya. Shmem zawiera także bufory graficzne GEM, zgodnie z komentarzami i listami jądra . Kernelnewbies.org/pipermail/kernelnewbies/2013- lipiec/.... Niektóre poprzednie wersje systemd miały błąd, który przeciekał bufory graficzne (poważnie), gdy serwer graficzny wyszedł ... to było „zabawne”. unix.stackexchange.com/questions/431982/... . Ten konkretny problem może mieć zastosowanie tylko wtedy, gdy cała sesja graficzna uległa awarii lub celowo wylogowałeś się z całej sesji (i ponownie się zalogowałeś).
sourcejedi