我没有找到解决方案,所以我不确定,有没有。
我有一个 VPS,有 512MB RAM 和 SSD 磁盘。
我的问题是:我想运行一个基于 java 的服务器程序,并且我希望它完全接受交换。它的 -Xms 现在是 384,但这还不够。
有什么解决办法吗?
ps:swappiness 是 60。我不想在 RAM 中看到这个过程 :-)
cgroups
可能对你有用。您可以应用内存限制,一旦进程达到该限制,它将开始交换。
这里有一个小例子和解释。
没有进程可以“完全”在交换中执行。代码+数据必须加载到 RAM 中,以便 CPU 读取/写入/执行它。你可以把东西暂时推出去交换,但是如果你的驻留集太小,你的系统会不断地交换。(即使使用 SSD,从磁盘加载也比从 RAM 加载慢数千倍。)
这种不断的交换将:
1) 降低整个系统的速度,因为磁盘的一些 I/O 带宽不断被使用
2) 缩短 SSD 的使用寿命,因为 SSD 在变坏之前具有有限数量的写入周期。
你最好的选择就是创建一个大的交换区域,然后像往常一样运行你的程序。操作系统会将不经常使用的位移出磁盘。如果您无法在系统的其余部分上获得良好的性能,那么您需要更多的 RAM。您可以尝试使用 ulimit 和/或 cgroups 来限制进程使用的 RAM 量,但这不能“解决”您的问题。
或者,您可以用更有效的语言重新编写服务器。(这是一种常见的权衡:程序员可能会花费数月时间优化运行时 CPU/内存占用,或者企业可能会在硬件上花费更多的钱。)