我的 Linux 服务器上有几个服务器类型的进程,占用了 50MB 的 RAM。它们并不是经常使用,我希望能够运行比 RAM 容量允许的更多的实例。我希望能够从 RAM 中删除一个进程并将其移动到磁盘的交换中。Linux 内核是否提供了任何功能来微调每个进程的交换性?
答案1
Linux 内核通过进程文件系统属性定义了内存页面(仅限匿名!)交换到磁盘的积极程度。
这vm.swappiness属性是针对每个系统全局应用的,而不是针对每个进程。如果您想尽可能避免交换,请将此值设置得较低。如果您的系统进程长时间处于休眠状态,您可以通过增加此值来获得积极的交换行为。
您可以从 CLI 临时更改它(系统重启后它将失效)
echo 90 > /proc/sys/vm/swappiness
或者坚持将此行添加到 /etc/sysctl.conf
vm.swappiness=90
并将其应用于
sysctl -p
或者应该可以使其更细粒度cgroups和记忆如果您的系统运行的是较新的 Linux 内核(自 2.6.24 以来?!),则子系统。假设您有一个可用的 cgroup 层次结构,其中包含记忆子系统附加 (/cgroups/mem) 和 cgroup (/cgroups/mem/your_cgroup),其中定义了任务/进程 (/cgroups/mem/your_cgroup/tasks)。然后,您可以更改交换性这组任务的行为如下:
cd /cgroups/mem/your_cgroup
echo 90 > memory.swappiness
有关内存子系统的更多详细信息,您可以阅读RedHat 资源指南。
答案2
您并不比内核的 VM 子系统更聪明。只需让进程保持原样,如果它们确实没有使用,它们就会被换出,而您无需执行任何操作。