交换 bash 脚本固定 htop 的内存使用情况

交换 bash 脚本固定 htop 的内存使用情况

我部署了一个 hack,将交换空间添加到 VPS,否则不允许我使用它来swapon创建文件。

在添加和执行脚本之前,我按照以下步骤操作此处概述。并总结如下:

  1. 首先我创建交换文件:sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k
  2. 然后sudo mkswap /swapfile
  3. 下一步通常是做一个sudo swapon /swapfile.然而,我使用的 VPS 与此不符,所以我发现这个帖子。 那声称我可以使用以下脚本作为解决方法。

见下文:

#!/bin/bash
SWAP="${1:-512}"
NEW="$[SWAP*1024]"; TEMP="${NEW//?/ }"; OLD="${TEMP:1}0"
umount /proc/meminfo 2> /dev/null
sed "/^Swap\(Total\|Free\):/s,$OLD,$NEW," /proc/meminfo > /etc/fake_meminfo
mount --bind /etc/fake_meminfo /proc/meminfo

有关更多上下文,详细描述了该过程在这个答案中。 (这主要只是填鸭式地运行 bash 脚本。)

一切似乎都很好,但是当我查看 htop (或free -m就此而言)时;内存使用量保持在我执行脚本时的任何值,并且使用的交换空间保持为零。这与我在服务器上运行的任何进程无关。我对内存分配中发生的事情的了解非常有限(这确实是我第一次搞砸它)。考虑到我正在运行的脚本,任何人都可以告诉我这是否有意义,为什么?

答案1

您极大地误解了该帖子所说的“假交换”的含义。有些程序出于各种原因坚持要求系统启用交换空间(咳嗽甲骨文咳嗽)。如果不是,程序(或者至少是它的安装程序)就会抱怨。当然,对于上述数据库,有一些方法可以让它继续运行,但人们通常不知道它们。

您发现的“假交换”是一种解决方法。这是对这些程序撒谎的一种方法,并假装启用了交换。交换是谎言。没有实际的交换。但程序相信存在,所以它不会抱怨。解决方法还涉及等,并且还free涉及 中的所有其他值。 /proc/meminfo(老实说:如果我发现它在我正在使用的系统上使用 - 更不用说管理 - 我会使用比“解决方法”更严厉的术语。这些术语不适合礼貌对话。)

Tante在另一个问题上的回答可能是正确的:OpenVZ 不支持虚拟机上的交换。没有其他选择swapon。它执行一系列检查,然后调用内核的swapon系统调用。如果系统调用不受支持,那么您就完成了。你做不到。对不起。

根据您尝试解决的实际问题,还有一些其他可能有效的方法:

  • 如果某个特定流程需要处理大量数据,mmap则可能仍然有效。或者使用更节省空间的算法。
  • 为虚拟机分配(或要求/向提供商付费)更多内存。可能在主机上启用交换。
  • 切换到不同的虚拟化解决方案,或在裸机上运行。
  • 您可以在 OpenVZ 容器内运行用户模式 ​​Linux。在该 UML 实例中,您可以启用交换。我完全预计性能会很糟糕。

答案2

如果我正确理解该脚本,它实际上不会以任何方式启用交换。相反,它只是通过替换来假装系统具有交换区,/proc/meminfofree相信htop系统具有交换区,但内核根本无法使用这个假交换区。如果您查看该脚本,您可能会注意到任何地方都没有提到交换文件或分区,因此内核没有可以使用的任何内容。

所以这:

交换空间保持为零

这正是我所期望发生的事情。

相关内容