强制进程完全在swap中运行

时间:2013-06-15 10:07:11

标签: linux bash process swap

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

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

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

有没有解决方案?

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

2 个答案:

答案 0 :(得分:10)

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

有一个小例子和解释here

答案 1 :(得分:5)

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

这种不断交换将:

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

2)缩短SSD的使用寿命,因为SSD在出现故障之前有一定数量的写入周期。

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

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