Linux

如何為linux設置每個程序的swapiness?

  • September 30, 2020

/proc/sys/vm/swappiness很好,但我想要一個像/proc/$PID/oom_adj. 這樣我就可以使某些程序比其他程序更不可能換出任何頁面。與 不同memlock(),這不會阻止程序被換出。就像nice,預設情況下,使用者不能降低他們的程序的可能性,而只是更有可能被交換。我想我不得不打電話給這個/proc/$PID/swappiness_adj

您可以為每個 cgroup 配置 swappiness:

http://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt

http://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt

有關 cgroup 的更簡單介紹和範例,請參閱

https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html

我想用我開發的現實生活解決方案來擴展Šimon Tóth 的答案。我認為它值得單獨回答。

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"

引用自:https://unix.stackexchange.com/questions/10214