我有一个运行 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
。