free命令中的共享内存是什么意思?


12

输出的第四列free称为shared。在互联网上可以看到的大多数输出​​中,共享内存为零。但这不是我的计算机上的情况:

$ 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

这也是以下内容的摘录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
=================================

共享内存是什么意思?

问题14102中的主要答案是:共享:一个不再存在的概念。留在输出中是为了向后兼容。对我来说似乎不足。“不存在”的概念不会占用600+ MB的RAM。



你有尝试过man free吗?
Archemar'9

@Archemar联机帮助页说:“共享:(大多数)tmpfs(/ proc / meminfo中的Shmem)使用的内存”。这不是很清楚。我想要更详尽的解释。
BertS

Answers:


5

“ shared” free和“ Shmem” /proc/meminfo计算tmpfs文件系统(内存中的文件系统)使用的所有内存以及共享内存(由分配shmget(2))。这在https://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt中进行了记录

这是我的一台服务器的示例:

$ 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

如果df将列出的所有tmpfs文件系统的已用大小(第3列)加起来,您将发现总和等于“ shared”和“ shmem”。


感谢您的解释,但是有tmpfs必要吗?是否可以删除它们?如果可能的话,如何删除它们?从休眠状态唤醒系统后,我已经多次遇到此问题(〜占用了4GB shared
Kasun Siyambalapitiya

2
嗨@KasunSiyambalapitiya。根据内核源注释和list.kernelnewbies.org/pipermail/kernelnewbies/2013-July/…,Shmem还包括GEM图形缓冲区。一些以前的systemd版本有一个错误,当图形服务器退出时,图形缓冲区(严重)泄漏了……这很“有趣”。unix.stackexchange.com/questions/431982/…。仅当您的整个图形会话崩溃时,或者如果您故意退出了整个会话(然后再次登录),才可以应用该特定问题。
sourcejedi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.