存在多个 tmpfs,其总组合空间大于总内存

存在多个 tmpfs,其总组合空间大于总内存

我有一个运行 CentOS 7 的 7.5G RAM 的 VPS,说实话我没有做太多优化等,因为它为网站提供了很好的服务。今天我打算为 mysql 临时表创建一个 ramdisk,所以我想我应该先检查是否有任何 ramdisk 或 tmpfs 已经存在,然后我发现了这个。

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1       XXXG  XXXG  XXXG   XX% /
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  324K  3.9G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
tmpfs           783M     0  783M   0% /run/user/0

我是一名普通的 *nix 用户,所以在我看来,已经有多个 tmpf,它们的最大限制加起来实际上超过了我拥有的总内存。那么我是否应该担心存在多个 tmpf,它们会占用所有可用内存并使机器瘫痪?或者这些 tmpf 是由操作系统本身创建的,不会造成任何问题。

更新 1
@ Michael。看来我正要惹上麻烦。/run在 top 的可用内存中添加 1G 文件会减少 1G,而 buff/cache 会增加 1G。因此,这意味着如果任何用户/程序包/脚本等设法在这些 tmpfs 中写入某些内容,系统就会崩溃。有什么想法可以让我回溯这些 tmpfs 并找出它们被创建的原因/方式吗?

更新 2
运行swapon -e回报

NAME      TYPE      SIZE USED PRIO
/dev/vda2 partition   8G   0B   -1  

意味着我的 swan 实际上存在于内存本身中,这意味着如果系统尝试使用 SWAP 将内容移出内存,内容将再次出现在内存中,只是在另一个地方。所以有什么建议可以解决这种情况。

答案1

关于这些tmpfs褶皱的来源:

  • /dev/shm是某些 Linux 发行版的标准功能。这里shm代表“共享内存”。它是默认创建的 ramdisk。它已使用 0 GB,表示您未使用它。
  • /run/user/0与基于 by 的系统使用的模式相匹配systemd,您似乎拥有该模式。systemd允许您为运行的“服务单元”指定内存限制。尝试sudo grep -R MemoryLimit /etc/systemd查看是否找到任何指定内存限制的单元文件。
  • 我相信/sys/fs/cgroup也是由 systemd 创建

换句话说,您似乎创建了许多标准 RAM 磁盘,如果您试图一次性填满它们,它们恰好会占用过多的内存。我不会担心这些文件的存在,因为它们在您的“屏幕截图”中几乎都没用到。

如果您想限制特定应用程序的内存使用量,systemd则可以轻松地根据每个“服务”进行限制。了解如何使用内存限制在您的“服务单元”配置文件中/etc/systemd

相关内容