是否可以阻止特定程序(即 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 身份登录来启动它,您可以使用su
或sudo
。
至于之后更改优先级,如果您懒得以 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
这个问题似乎已经在这里得到解答了:
尽管大家一致认为你不应该这么做 :/
答案4
您可以使用mlockall()
syscall。mlockall() 强制内存进程驻留(= 无交换、无过度提交等...)。据我所知,没有 shell 命令可以执行此操作,但很容易创建一个。它看起来像:
if (mlockall(MCL_FUTURE | MCL_CURRENT))
perror("mlockall");
execvp(argv[0], argv);
请注意,您需要以 root 身份来调用mlockall()
。
但是,正如其他答案所说,我不认为这真正是你想要的。