强制进程完全在swap中运行

Mik*_*pet 3 linux bash swap process

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

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

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

有什么解决方案吗?

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

Alp*_*per 10

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

有一个小例子,说明在这里.

  • 如果您在答案中添加一个小例子,将会很方便。我为自己构建了[这个小脚本](https://pastebin.com/Q9udkRuw)。 (2认同)
  • 这是一个更好的答案,因为它实际上回答了问题。 (2认同)

Bra*_*ncy 5

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

这种不断的交换将:

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

2)缩短SSD的使用寿命,因为SSD在出现故障之前具有有限的写入周期.

您最好的选择就是创建一个大的交换区域,并正常运行您的程序.操作系统会将不经常使用的位移出磁盘.如果你无法在系统的其余部分获得良好的性能,那么你需要更多的RAM.您可以尝试使用ulimit和/或cgroups来限制进程使用的RAM量,但这不能"修复"您的问题.

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