Quelle est la signification de la mémoire «partagée» dans la commande «libre»?

12

La quatrième colonne de la sortie de freeest nommée partagée . Sur la plupart des sorties que je peux voir sur Internet, la mémoire partagée est nulle. Mais ce n'est pas le cas sur mon ordinateur:

$ 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

Voici également un extrait de la sortie 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
=================================

Quelle est la signification d'une mémoire partagée ?

La réponse principale dans la question 14102 dit: partagée: un concept qui n'existe plus. Il est laissé dans la sortie pour une compatibilité descendante . Ça me semble insuffisant. Un concept «inexistant» ne prend pas plus de 600 Mo de RAM.

BertS
la source
4
as-tu essayé man free?
Archemar
La page de manuel @Archemar dit: "partagé: mémoire utilisée (principalement) par tmpfs (Shmem dans / proc / meminfo)". Ce n'est pas très clair; J'aimerais une explication plus élaborée.
BertS

Réponses:

5

"Shared" in freeet "Shmem" in /proc/meminfocount toute la mémoire utilisée par le système de fichiers tmpfs (un système de fichiers en mémoire) ainsi que la mémoire partagée (allouée par shmget(2)). Ceci est documenté dans https://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt .

Voici un exemple de l'un de mes serveurs:

$ 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 vous résumez la taille utilisée (3e colonne) de tous les systèmes de fichiers tmpfs répertoriés par df, vous constaterez que la somme est égale à "partagée" et "shmem".

lqhl
la source
Merci d'avoir expliqué, mais sont-ils tmpfsnécessaires, puis-je les supprimer et si possible comment les supprimer?. J'ai rencontré ce problème plusieurs fois après avoir réveillé le système de l'hibernation (~ 4 Go sont pris par shared)
Kasun Siyambalapitiya
2
Salut @KasunSiyambalapitiya. Shmem comprend également des tampons graphiques GEM, conformément aux commentaires des sources du noyau et lists.kernelnewbies.org/pipermail/kernelnewbies/2013-juillet/… . Certaines versions précédentes de systemd avaient un bogue qui fuyait (sérieusement) les tampons graphiques à la sortie du serveur graphique ... c'était "amusant". unix.stackexchange.com/questions/431982/… . Ce problème spécifique ne peut s'appliquer que si la totalité de votre session graphique a planté ou si vous vous êtes délibérément déconnecté de votre session (et vous y reconnectez).
sourcejedi