我可以告诉Linux不要换掉特定进程的内存吗?

san*_*ity 44 linux swap

有没有办法告诉Linux它不应该将特定进程的内存交换到磁盘?

它是一个Java应用程序,所以理想情况下我希望通过命令行实现此目的.

我知道你可以将全局swappiness设置为0,但这是明智的吗?

Tho*_*yer 25

您可以通过Linux下的mlockall(2)系统调用来完成此操作; 这将适用于整个过程,但请阅读您需要传递的参数.

你真的需要把整个东西拉进核心吗?如果它是一个java应用程序,你可能会将整个JVM锁定在内核中.我不知道这样做的命令行方法,但你可以写一个简单的程序来fork调用mlockall,然后调用exec.

您还可以查看madvise(2)中的某个访问模式通知是否满足您的需求.如果VM子系统适用于您,可以更好地解决VM子系统有关更好的分页策略的问题.

注意很久以前现在在SunOS下,有一种类似于madvise的机制叫做vadvise(2).

  • ["内存锁不是由fork(2)创建的子进程继承的,并且在execve(2)期间或进程终止时自动删除(解锁)."](http://www.kernel.org/doc/ man-pages/online/pages/man2/mlock.2.html) - fork/mlock/exec方法不起作用 (14认同)
  • 扩展,棘手的 hack:如果进程不会为你调用这个 `mlockall()`,你可以通过 `gdb` 来帮助它,让它为你调用它。:-) (2认同)

Mat*_*ett 14

如果您希望更改进程的swappiness,请将其添加到cgroup并设置该cgroup的值:

https://unix.stackexchange.com/questions/10214/per-process-swapiness-for-linux#10227