在不同的 cgroupv2 中自動移動分叉的程序
我一直在 cgroupv1 中使用
apache2-mpm-itk
with來自動分類在為不同的虛擬主機提供 Web 請求時產生的子程序大約 3 年,並且它執行良好,當虛擬主機開始使用過多的 CPU/RAM 時,oom 殺手會小心那個特定的 vhost 並讓其他人獨自一人。cgrulesengd``apache2-mpm-itk
我現在正在準備一個新的 Debian 11 伺服器,我發現我現在需要使用 cgroup v2。所以我試圖將我的資源控制解決方案帶到新的世界。
當我使用該使用者的資源控制創建我的 eg
/etc/systemd/system/user-UID.slice.d/override.conf
時,它們不適用於分叉的程序,cgrulesengd
就像我以前能夠做的那樣,正如我用systemd-cgls
. 相反,父級及其所有子級仍然屬於同一個 apache2.service 片。有沒有一種方法可以自動對不同 cgroup 中的程序的子程序進行分類,而不是使用 systemd 的生成程序?
systemd-devel
我在郵件列表上發布了這個問題:https://lists.freedesktop.org/archives/systemd-devel/2022-January/047257.html
以下是本傑明·伯格的回應:
https://lists.freedesktop.org/archives/systemd-devel/2022-January/047260.html
本傑明非常有幫助的回答。這裡摘錄兩段:
systemd will not help you with managing the cgroup sub-hierarchy underneath the daemon. I suppose the most generic solution would be something like cgrulesengd for cgroup v2. No idea if something like that exists.
和:
Managing the cgroup hierarchy is quite simple in principle (mkdir and then a write to cgroup.procs). Or, even better by using CLONE_INTO_CGROUP when creating the processes. It is not that hard to write small daemon that does this.
編輯:
似乎 cgconfigparser 和 cgrulesengd 已更新為支持 cgroupv2。
在撰寫本文時,它們必須從原始碼建構。
該軟體包可以從那裡下載:
https://github.com/libcgroup/libcgroup/releases/tag/v2.0
然後按照以下步驟操作,例如:
./configure make
cgconfig.conf 中的控制器參數名稱可能不同,請確保您在新世界中使用 cgroupv2 的名稱。