AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 417855
Accepted
virullius
virullius
Asked: 2018-01-18 13:27:40 +0800 CST2018-01-18 13:27:40 +0800 CST 2018-01-18 13:27:40 +0800 CST

为什么 Linux 在 VM 中需要交换空间?

  • 772

Linux VM 运行 nginx(或任何其他具有稳定资源使用的轻量级守护程序)。虚拟机分配了 2GB 内存,其中 200-300MB 供操作系统和服务使用,其余用于文件缓存和缓冲区。在一个特定的用例中,我期望一个简单的 500MB 开销。

问:为什么这个设置需要交换空间?

“防止内存耗尽”的标准答案在这里对我来说没有意义,原因有两个:1:对内存的需求已经确立,不需要支持意外或突然的显着增加。2:无论如何,Swap只会延迟OOM情况。同样的事情可以通过首先为虚拟机分配更多的内存来完成,特别是因为它是精简配置的,只要它未被使用,任何人都不会错过它。

支持休眠的另一个常见答案不适用于 VM 中的服务器。

我认为没有理由在这样的服务器上进行交换;我错过了什么吗?

swap
  • 2 2 个回答
  • 5051 Views

2 个回答

  • Voted
  1. Best Answer
    Stephen Kitt
    2018-01-18T14:27:00+08:002018-01-18T14:27:00+08:00

    您不应该考虑“是否有交换”,您应该考虑您的整体内存分配策略并确定是否需要交换。这有两个主要方面。

    如今交换的主要目的不是扩展物理内存,而是为其他不可回收的页面(例如内存分配和匿名mmaps)提供后备存储。如果在没有交换的情况下运行,则会强制内核将匿名内存保留在物理内存中,这会降低其应对不同内存需求的能力。显然,如果您知道您的工作负载始终适合可用的物理内存,那么这应该不是问题。

    要考虑的第二个方面是内核的过度使用策略。默认情况下,无论内存负载如何,内存分配大部分都会成功。如果你想控制你的工作量,在检查模式下运行通常会很有帮助(/proc/sys/vm/overcommit_memory设置为 2);然后提交被限制为交换的总和,并且未为大页面分配的物理内存由过度使用比率(默认为 50%)调整。如果您在没有交换的情况下运行,则默认情况下没有任何东西可以分配超过一半的物理内存;添加交换会线性增加限制,比增加过度使用率风险更小。(当试图在典型的服务器设置上运行大型 JVM 时,这经常会让人绊倒。)

    我提到了上面描述的两个主要方面,但在我看来,在某些情况下还需要考虑另一点(它实际上是第一点的变体):tmpfs文件系统很容易让您的系统陷入困境,如果没有交换...

    有关这一切的更多信息,我建议阅读proc(5)手册页中关于过度使用的部分,以及Chris Down 最近的博客文章为 swap 辩护。

    • 7
  2. Matthew Gauthier
    2018-01-18T14:43:10+08:002018-01-18T14:43:10+08:00

    您不需要交换空间,但有几点您没有提到值得牢记。系统启动时加载的某些页面将永远不会再被触摸。可以说将它们留在磁盘上而不是在内存中更好,尽管任何性能提升都可能很小。

    在相关的说明中,一些工作负载(例如 jvm)分配了相当多的内存,这些内存可能永远不会被使用。如果你的工作量习惯性地过度使用,你可能会把婴儿和洗澡水一起扔出去。将内核限制为物理内存可能意味着您要么 a) 分配比 VM 需要的更多 RAM,浪费可能用于其他 VM 的服务器资源,要么 b) 导致内核减少缓冲区数量以保留未使用的(或很少used) 分配的页面,从而导致磁盘活动增加,从而降低整体性能。

    如果不启用交换,如果您需要登录系统进行调试,您可能会发现开销神秘地消失了。实际上只需要一次登录到一个结合了严格的启动内存限制和内存泄漏的系统,以鼓励更自由的交换空间策略。用一个小时在一个 thrashing 机器上做任何事情仍然比 OOM 杀手不断开火的改进。

    最后,在 Unix 系统中将内核转储放置在交换中的情况并不少见。相当多的管理员仍会分配足够的交换空间以允许调试内核崩溃。(尽管显然 Linux 现在为此提供了解决方法。)

    • 4

相关问题

  • 当根分区和 RAM 足够大时,是否需要交换分区?[复制]

  • Linux 交换分区是否支持修剪?

  • 在 Arch Linux 中手动安装交换文件而不是交换分区

  • 使用 zswap 和 max_pool_percent = 100 防止 zram LRU 反转

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve