【问题标题】:Force process to run in swap completely强制进程完全在交换中运行
【发布时间】:2013-06-15 10:07:10
【问题描述】:

我没有找到解决方案,所以我不确定,有没有。

我有一个 VPS,有 512MB RAM 和 SSD 磁盘。

我的问题是:我想运行一个基于 java 的服务器程序,我希望它完全接受交换。它的 -Xms 现在是 384,但这还不够。

有什么解决办法吗?

p.s.:swappiness 是 60。我不想在 RAM 中看到这个过程 :-)

【问题讨论】:

  • 你不想交换任何进程。当由于某种原因并非所有进程都不能保留在 RAM 中时,交换是一种后备,但它会严重影响性能。
  • 至少一条处理器指令需要在 RAM 中(但随后您需要处理跳转以捕获到达目的地的陷阱),实际上至少需要一个虚拟内存页。

标签: linux bash process swap


【解决方案1】:

cgroups 可能对你有用。您可以应用内存限制,一旦进程达到该限制,它将开始交换。

有一个小例子和解释here

【讨论】:

  • 如果您在答案中添加一个小例子会很方便。我为自己构建this small script
  • 这是一个更好的答案,因为它实际上回答了问题。
【解决方案2】:

没有进程可以“完全”在交换中执行。代码+数据必须加载到 RAM 中,以便 CPU 读取/写入/执行它。你可以把东西暂时推出去交换,但是如果你的驻留集太小,你的系统会不断地交换。 (即使使用 SSD,从磁盘加载也比从 RAM 加载慢数千倍。)

这种常量交换将:

1) 降低整个系统的速度,因为磁盘的某些 I/O 带宽会不断被使用

2) 缩短 SSD 的使用寿命,因为 SSD 在变坏之前的写入周期数是有限的。

最好的办法是创建一个大的交换区,然后正常运行程序。操作系统会将不经常使用的位移出磁盘。如果您无法在系统的其余部分上获得良好的性能,那么您需要更多的 RAM。您可以尝试使用 ulimit 和/或 cgroups 来限制进程使用的 RAM 量,但这不能“解决”您的问题。

或者,您可以用更高效的语言重新编写服务器。 (这是一个常见的权衡:程序员可能会花费数月时间优化运行时 CPU/内存占用,或者企业可能会在硬件上花费更多的钱。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2016-06-23
    • 1970-01-01
    相关资源
    最近更新 更多