Debian

在不同的 cgroupv2 中自動移動分叉的程序

  • January 17, 2022

我一直在 cgroupv1 中使用apache2-mpm-itkwith來自動分類在為不同的虛擬主機提供 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 的名稱。

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