使用 cgroups 限制使用者 ram 不起作用(對我來說)

使用 cgroups 限制使用者 ram 不起作用(對我來說)

我註冊是因為我無法透過一些教學/評論/您在谷歌上找到的任何內容來管理運行cgroup。我想限制特定用戶可以使用的內存量。網路上說「cgroups」。我的測試伺服器運行的是 Ubuntu 14.04。您可以將提到的教學分為兩類。使用 echo 直接設定限制並使用特定配置。兩者都不適合我。

使用 echo 設定限制

cgcreate -g cpu,cpuacct,...:/my_group

結束時沒有任何通知。當我嘗試跑步時

echo 100M > memory.limit_in_bytes

即使使用 sudo 時它也只是說「不允許」。我什至沒有達到任何限制其他用戶的程度。

使用配置設定限制

我讀到了兩個設定檔。這是我的設定檔:

cgconfig.conf

mount {
    memory  = /cgroup/memory;
}

group limit_grp {
        memory {
                memory.limit_in_bytes=100M;
                memory.memsw.limit_in_bytes=125M;
        }
}

cgrules.conf

testuser    memory    limit_grp

當我跑步時

cgconfigparser -l /etc/cgconfig.conf

它安裝到 systemd。現在我用 testuser 登錄,運行記憶體密集型任務 - 它在運行時不關心我的限制。

我嘗試重新啟動,沒有任何改變。即使使用核心配置的一些奇怪的嘗試也不起作用。我是 cgroups 的新手,沒想到它會這麼複雜。如果對我的主題有任何建議,我將不勝感激。先感謝您!

答案1

您看到此行為的原因可能是由於您的登入工作階段已經關聯了一個記憶體限制群組,並且根據 systemd 配置,該進程正在繼承該記憶體限制組。

使用以下命令檢查正在運行的進程 cgroup:

cat /proc/pid/cgroup

……你可能會看到類似的內容:

13:name=systemd:/user/0.user/2.session
12:debug:/
11:pids:/
10:net_prio:/user/0.user/2.session
9:perf_event:/user/0.user/2.session
8:net_cls:/user/0.user/2.session
7:freezer:/user/0.user/2.session
6:devices:/user/0.user/2.session
5:memory:/user/0.user/2.session
4:blkio:/user/0.user/2.session
3:cpuacct:/user/0.user/2.session
2:cpu:/
1:cpuset:/

假設您不希望出現這種行為,您可以使用自訂 cgroup 來進行記憶體控制器編輯/etc/systemd/logind.confmemoryControllers行中刪除。

答案2

我也遇到了類似的問題(不過在 Fedora 29 上):似乎我的問題/etc/cgconfig.conf完全被忽略了。跑步

sudo systemctl enable cgconfig

並重新啟動解決了問題。

相關內容