Qual é o significado da memória `shared` no comando` free`?

12

A quarta coluna na saída de freeé nomeada compartilhada . Na maioria das saídas que vejo na internet, a memória compartilhada é zero. Mas esse não é o caso no meu computador:

$ 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

Aqui também está um trecho da saída de 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 é o significado de uma memória compartilhada ?

A resposta principal da pergunta 14102 diz: shared: um conceito que não existe mais. É deixado na saída para compatibilidade com versões anteriores . Parece insuficiente para mim. Um conceito "inexistente" não ocupa mais de 600 MB de RAM.

BertS
fonte
4
Possível duplicado de uso de memória real
você já tentou man free?
Archemar 01/09/16
Manpage @Archemar diz: "shared: Memória usada (principalmente) por tmpfs (Shmem em / proc / meminfo)". Isso não está muito claro; Eu gostaria de uma explicação mais elaborada.
berts

Respostas:

5

"Shared" freee "Shmem" /proc/meminfocontam toda a memória usada pelo sistema de arquivos tmpfs (um sistema de arquivos na memória) e também a memória compartilhada (alocada por shmget(2)). Isso está documentado em https://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt .

Aqui está um exemplo de um dos meus servidores:

$ 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 você resumir o tamanho usado (terceira coluna) de todos os sistemas de arquivos tmpfs listados por df, encontrará a soma igual a "shared" e "shmem".

lqhl
fonte
Obrigado por explicar, mas são tmpfsnecessários. Posso excluí-los e, se possível, como excluí-los ?. Eu tenho encontrar esse problema muitas vezes depois de acordar o sistema do estado de hibernação (~ 4GB é tomado por shared)
Kasun Siyambalapitiya
2
Oi, @KasunSiyambalapitiya. O Shmem também inclui buffers gráficos do GEM, de acordo com os comentários e as listas de fontes do kernel.kernelnewbies.org/pipermail/kernelnewbies/2013-July/… . Algumas versões anteriores do systemd tinham um bug que vazava buffers gráficos (seriamente) quando o servidor de gráficos saía ... isso era "divertido". unix.stackexchange.com/questions/431982/… . Esse problema específico só poderia ser aplicado se toda a sua sessão gráfica falhar ou se você deliberadamente desconectou toda a sessão (e voltou a entrar).
sourcejedi