LINUX:如何locking内存中进程的页面

我有一个LINUX服务器运行一个有大量内存的进程(某种数据库引擎)。 这个进程分配的内存非常大,部分内存需要交换(分页)。

我想要做的是locking内存中所有其他进程(或运行进程的子集)的内存页面,以便只有数据库进程的页面被换出。 例如,我想确保我可以继续远程连接并监视机器,而不会受到交换的影响。 即我希望sshd,X,顶部,vmstat等有所有的页面内存驻留。

在Linux上有mlock(),mlockall()系统调用,似乎提供了正确的旋钮来做钉住。 不幸的是,在我看来,我需要在每个进程中进行明确的调用,不能从不同的进程或从父进程调用mlock()(mlock()不会在fork()或evecve())之后inheritance。

任何帮助是极大的赞赏。 虚拟比萨和啤酒提供:-)。

Solutions Collecting From Web of "LINUX:如何locking内存中进程的页面"

我已经做了一段时间了,所以我可能错过了几个步骤。

制作一个包含如下所示的GDB命令文件:

call mlockall(3) detach 

然后在命令行上找到你想要mlock的进程的PID。 类型:
gdb --pid [PID] --batch -x [command file]

如果你喜欢pgrep ,那可能是:
gdb --pid $(pgrep sshd) --batch -x [command file]

实际上,锁定系统中大部分内容的页面看起来有些粗糙/激烈,更不用说这样滥用机制,似乎会导致一些其他意想不到的问题。

理想情况下,你可能真正想要的是控制进程组的“swappiness”,所以数据库首先被交换,而重要的系统管理工具是最后一个, 有一种方法来做到这一点 。

在搜索mlockall信息时,我碰到了这个工具。 您可能能够为您的发行找到它。 我只找到手册页。

http://linux.die.net/man/8/memlockd