是否可以阻止特定程序(即 rhythmbox 及其依赖项)交换到磁盘?
我之所以这么问,是因为每当 Chromium 占用太多内存时,音乐播放器就会出现问题。有没有办法解决这个问题?这在 Windows 中不再是问题,所以大概有办法。
Cri*_*itu 10
我认为打嗝问题不一定是由交换引起的。如果程序正在播放某些内容,Linux 应该注意到这一点而不是交换它。没有做太多事情的程序是第一个被交换的程序。您可以通过查看ps或top中的RSS
/RES
字段来检查程序是否真的被交换了。是驻留集大小,任务正在使用的非交换物理内存(以千字节为单位)。RSS
我认为您的问题很可能是由于 CPU 和 I/O 调度不当以及 Rhythmbox 的一些低效导致它对高系统负载敏感。CPU 优先级可以使用nice和renice命令更改。可以使用ionice命令更改 I/O 优先级。只有超级用户才能使用高优先级。您还应该知道 Linux 内核人员正在尝试通过各种低延迟补丁来提高桌面系统的响应能力,因此您可以考虑使用它们。其中之一是由 Mike Galbraith 编写的约 200 行补丁,它甚至给 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
Run Code Online (Sandbox Code Playgroud)
您需要以 root 身份运行它。如果您不想以 root 身份登录只是为了启动它,您可以使用su
或sudo
。
至于之后更改优先级,如果您懒得以 root 身份登录来更改它,您可以尝试使用每 5 分钟运行一次并设置rhythmbox
进程优先级的 cron 作业,但我不建议这样做:
#!/bin/sh
renice -n -10 -p `pidof rhythmbox`
ionice -c 1 -n 1 -p `pidof rhythmbox`
Run Code Online (Sandbox Code Playgroud)
简短的回答:你不能,也不应该。
很久以前,可执行文件尊重粘性位+t
,它会告诉内核不要交换,但今天它被忽略了。
如果内核决定它必须交换,它肯定有正当理由。Linux 在内存使用方面非常激进,因为空闲的 RAM 是一种浪费资源。
如果你真的不想交换,获得更多的内存,或者只是# swapoff -a
(不推荐,如果你已经有问题,可能会使你的系统无法使用)。
Shouldn't
当您正在开发一些应用程序并且根本不希望它交换时,就会发生这种情况。看看这个关于 stackoverflow 的帖子。
有几种方法可以做到这一点。您可以尝试尝试“说”Linux使用交换更少工作(通常):
echo 10 > /proc/sys/vm/swappiness
Run Code Online (Sandbox Code Playgroud)
来自:https : //www.kernel.org/doc/Documentation/sysctl/vm.txt
互换性
此控件用于定义内核交换内存页面的积极程度。较高的值会增加攻击性,较低的值会减少交换量。
默认值为 60。
其他选项是使用 cgroups 内核管理器,这是每个进程特定的,但您将有一些“工作”要做:在这里回答:https ://unix.stackexchange.com/questions/10214/per-process-swapiness-for -linux#10227
归档时间: |
|
查看次数: |
29454 次 |
最近记录: |