如何防止特定程序交换?

如何防止特定程序交换?

是否可以阻止特定程序(即 rhythmbox 及其依赖项)交换到磁盘?

我之所以问这个问题,是因为每当 Chromium 占用过多内存时,音乐播放器就会出现问题。有办法解决这个问题吗?这在 Windows 中不再是问题,所以大概有办法。

答案1

我认为打嗝问题不一定是由交换引起的。如果某个程序正在播放某些内容,Linux 应该会注意到这一点,并且不会交换它。不做太多事情的程序最先被交换。您可以通过查看RSS/RES字段来检查程序是否真的被交换了附言或者顶部.RSS是驻留集大小,即任务正在使用的非交换物理内存(以千字节为单位)。

我认为您的问题很可能是由不正确的 CPU 和 I/O 调度以及 Rhythmbox 的效率低下引起的,这使其对高系统负载很敏感。可以使用以下命令更改 CPU 优先级好的雷尼塞。可以使用伊奥尼采命令。只有超级用户才能使用高优先级。您还应该知道,Linux 内核人员正在尝试使用各种低延迟补丁来提高桌面系统的响应能力,因此您可以考虑使用它们。其中之一是~200 行补丁由 Mike Galbraith 编写甚至 Linus 也对此印象深刻。此补丁的替代方案是Lennart Poettering 的 cgroups 技巧我认为这将是 Fedora 15 的默认设置。

无论如何,如果没有这些补丁,则有两个选择:以高优先级启动程序或之后进行更改。对于第一个选项,您可以使用 Rhythmbox 的包装器脚本:

#!/bin/sh
# Run Rhytmbox with high CPU and I/O priorities
nice -n -10 ionice -c 1 -n 1 su -l -c rhythmbox alexei

您需要以 root 身份运行它。如果您不想以 root 身份登录来启动它,您可以使用susudo

至于之后更改优先级,如果您懒得以 root 身份登录来更改它,您可以尝试使用每 5 分钟运行一次并设置进程优先级的 cron 作业rhythmbox,但我不建议这样做:

#!/bin/sh
renice -n -10 -p `pidof rhythmbox`
ionice -c 1 -n 1 -p `pidof rhythmbox`

答案2

有几种方法可以做到这一点。你可以尝试尝试“说”Linux使用 swap 减少工作量(一般来说):

echo 10 > /proc/sys/vm/swappiness

从 :https://www.kernel.org/doc/Documentation/sysctl/vm.txt

交换性

此控制用于定义内核交换内存页面的积极程度。值越高,积极程度越高;值越低,交换量越少。

默认值为 60。

其他选项是使用 cgroups 内核管理器,这是特定于每个进程的,但您需要做一些“工作”:在这里回答:https://unix.stackexchange.com/questions/10214/per-process-swapiness-for-linux#10227

答案3

这个问题似乎已经在这里得到解答了:

https://stackoverflow.com/questions/578137/can-i-tell-linux-not-to-swap-out-a-particular-processes-memory

尽管大家一致认为你不应该这么做 :/

答案4

您可以使用mlockall()syscall。mlockall() 强制内存进程驻留(= 无交换、无过度提交等...)。据我所知,没有 shell 命令可以执行此操作,但很容易创建一个。它看起来像:

if (mlockall(MCL_FUTURE | MCL_CURRENT))
     perror("mlockall");
execvp(argv[0], argv);

请注意,您需要以 root 身份来调用mlockall()

但是,正如其他答案所说,我不认为这真正是你想要的。

相关内容