Qual è il significato della memoria `condivisa` nel comando` libero`?


12

La quarta colonna nell'output di freeè denominata condivisa . Sulla maggior parte delle uscite che vedo su Internet, la memoria condivisa è zero. Ma non è il caso sul mio computer:

$ 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

Ecco anche un estratto dell'output di 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
=================================

Qual è il significato di una memoria condivisa ?

La risposta principale alla domanda 14102 dice: condivisa: un concetto che non esiste più. Viene lasciato nell'output per compatibilità con le versioni precedenti . Mi sembra insufficiente. Un concetto "inesistente" non richiede oltre 600 MB di RAM.


4
Possibile duplicato dell'utilizzo della memoria reale

hai provato man free?
Archemar,

La manpage di @Archemar dice: "condivisa: memoria utilizzata (principalmente) da tmpfs (Shmem in / proc / meminfo)". Questo non è molto chiaro; Vorrei una spiegazione più elaborata.
BertS

Risposte:


5

"Shared" in freee "Shmem" /proc/meminfocontano tutta la memoria utilizzata dal file system tmpfs (un file system nella memoria) e anche la memoria condivisa (allocata da shmget(2)). Questo è documentato in https://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt .

Ecco un esempio da uno dei miei 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

Se sommi la dimensione usata (terza colonna) di tutti i filesystem tmpfs elencati da df, scoprirai che la somma è uguale a "condivisa" e "shmem".


Grazie per la spiegazione, ma sono tmpfsnecessari, posso eliminarli e, se possibile, come eliminarli ?. Ho riscontrato questo problema molte volte dopo aver svegliato il sistema dal letargo (~ 4GB è preso da shared)
Kasun Siyambalapitiya,

2
Ciao @KasunSiyambalapitiya. Shmem include anche buffer grafici GEM, come da commenti sorgente del kernel e lists.kernelnewbies.org/pipermail/kernelnewbies/2013- luglio /… . Alcune versioni precedenti di systemd avevano un bug che trapelava (seriamente) ai buffer grafici quando il server grafico usciva ... era "divertente". unix.stackexchange.com/questions/431982/… . Questo problema specifico potrebbe applicarsi solo se l'intera sessione grafica si è arrestata in modo anomalo o se si è disconnessi deliberatamente da tutta la sessione (e quindi ricollegati).
Fontejedi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.