有没有办法告诉Linux它不应该将特定进程的内存交换到磁盘?
它是一个Java应用程序,所以理想情况下我希望通过命令行实现此目的.
我知道你可以将全局swappiness设置为0,但这是明智的吗?
您可以通过Linux下的mlockall(2)系统调用来完成此操作; 这将适用于整个过程,但请阅读您需要传递的参数.
你真的需要把整个东西拉进核心吗?如果它是一个java应用程序,你可能会将整个JVM锁定在内核中.我不知道这样做的命令行方法,但你可以写一个简单的程序来fork
调用mlockall
,然后调用exec
.
您还可以查看madvise(2)中的某个访问模式通知是否满足您的需求.如果VM子系统适用于您,可以更好地解决VM子系统有关更好的分页策略的问题.
注意很久以前现在在SunOS下,有一种类似于madvise的机制叫做vadvise(2).
如果您希望更改进程的swappiness,请将其添加到cgroup并设置该cgroup的值:
https://unix.stackexchange.com/questions/10214/per-process-swapiness-for-linux#10227