¿Cuál es el significado de la memoria `compartida` en el comando` libre`?

12

La cuarta columna en la salida de freese denomina compartida . En la mayoría de las salidas que puedo ver en internet, la memoria compartida es cero. Pero ese no es el caso en mi computadora:

$ 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

Aquí también hay un extracto de la salida 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
=================================

¿Cuál es el significado de una memoria compartida ?

La respuesta principal en la pregunta 14102 dice: compartido: un concepto que ya no existe. Se deja en la salida para compatibilidad con versiones anteriores . Me parece insuficiente. Un concepto "inexistente" no requiere más de 600 MB de RAM.

BertS
fuente
44
Posible duplicado del uso de memoria real
has intentado man free?
Archemar
La página de manual de @Archemar dice: "compartido: Memoria utilizada (principalmente) por tmpfs (Shmem en / proc / meminfo)". Eso no está muy claro; Me gustaría una explicación más elaborada.
BertS

Respuestas:

5

"Shared" en freey "Shmem" /proc/meminfocuentan toda la memoria utilizada por el sistema de archivos tmpfs (un sistema de archivos en la memoria) y también la memoria compartida (asignada por shmget(2)). Esto está documentado en https://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt .

Aquí hay un ejemplo de uno de mis 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

Si suma el tamaño utilizado (tercera columna) de todos los sistemas de archivos tmpfs enumerados por df, encontrará que la suma es igual a "compartida" y "shmem".

lqhl
fuente
Gracias por explicar, pero son tmpfsnecesarios, ¿puedo eliminarlos y, si es posible, cómo los elimino? Tengo surja este problema muchas veces después de despertar de la hibernación del sistema (~ 4 GB es tomada por shared)
Kasun Siyambalapitiya
2
Hola @KasunSiyambalapitiya. Shmem también incluye buffers de gráficos GEM, según los comentarios de la fuente del kernel y lists.kernelnewbies.org/pipermail/kernelnewbies/2013-July/… . Algunas versiones anteriores de systemd tenían un error que filtraba los búferes de gráficos (en serio) cuando el servidor de gráficos salió ... eso fue "divertido". unix.stackexchange.com/questions/431982/… . Ese problema específico solo podría aplicarse si toda su sesión gráfica se ha bloqueado, o si se ha desconectado deliberadamente de toda la sesión (y ha vuelto a iniciarla).
sourcejedi