如何为 Linux 设置每个进程的交换性?

如何为 Linux 设置每个进程的交换性?

/proc/sys/vm/swappiness很好,但我想要一个像每个进程一样的旋钮/proc/$PID/oom_adj。这样我就可以使某些进程比其他进程更不可能将其任何页面换出。与 不同memlock(),这不会阻止程序被换出。与此类似nice,默认情况下用户无法降低其程序的可能性,而只能提高被交换的可能性。我想我必须这样称呼/proc/$PID/swappiness_adj

答案1

答案2

我想延长西蒙·托特的回答使用我开发的现实生活解决方案。我认为它值得一个单独的答案。

RedHat 7 - cgroups v1 和 systemd

作为唯一从 RedHat 8 开始支持 cgroups v2,我们这里需要使用cgroups v1。

官方指南建议添加ExecStartPost可更改服务的内存设置,但只有在您进行另一项可用更改后,它才会起作用/sys/fs/cgroup/memory/system.slice

所以我最终将其添加到我的服务单元文件中,假设服务名称是example

# the first entry is here only to make /sys/fs/cgroup/memory/system.slice path
# available for the next entry
MemoryLimit=64G
# this entry actually effectively disables swap for the service
ExecStartPost=/bin/bash -c \
              "echo 0 > /sys/fs/cgroup/memory/system.slice/example.service/memory.swappiness"

相关内容