将进程从swap中移出

我的Linux服务器上有几个服务器types的进程使用了​​50MB的内存。 他们不是经常被使用,我希望能够运行比我的RAM容量允许更多的实例。 我希望能够从RAM中删除进程并将其移动到磁盘的交换linux内核是否提供了一些微调每个进程的swappiness?

Linux内核通过proc文件系统提供一个属性,该属性定义了内存页面(仅匿名!)被交换到磁盘的方式。

vm.swappiness属性是每个系统全局应用,但不是每个进程。 如果要尽可能避免交换,请将此值设置为低。 如果您的系统进程长时间hibernate,您可以通过增加此值来获得主动的交换行为。

您可以从CLI临时更改它(它不会在系统重新启动后)

echo 90 > /proc/sys/vm/swappiness 

或者坚持把这一行添加到/etc/sysctl.conf

 vm.swappiness=90 

和应用它

 sysctl -p 

或者,如果你的系统运行在最新的Linux内核上(2.6.24以上版本),应该可以使用cgroup内存子系统更加细化。 让我们假设你有一个cgroup hieararchy, 内存子系统连接(/ cgroups / mem)和一个cgroup(/ cgroups / mem / your_cgroup),其中定义了任务/进程(/ cgroups / mem / your_cgroup / tasks)。 然后,您可以更改这组任务的swappiness行为,如下所示:

 cd /cgroups/mem/your_cgroup echo 90 > memory.swappiness 

有关内存子系统的更多细节,您可以阅读例如RedHat资源指南 。

你并不比内核的虚拟机子系统更聪明。 只要让stream程成为现实,而且如果他们真的没有被使用,他们就会被换掉,而不需要做任何事情。