Systemd

為什麼使用 CPUShares 屬性時這個 systemd 服務資源不受限制?

  • January 5, 2022

好吧,為了讓我的手弄髒 cgroups 和 systemd,我編寫了我能想到的最愚蠢的 C 程序(只是一個計時器和一個自旋鎖 while 循環)並將它命名為idiot,我在其中附帶了以下idiot.service文件/sys/fs/systemd/system/

[Unit]
Description=Idiot - pretty idiotic imo

[Service]
Type=simple
ExecStart=/path/to/idiot
User=bruno
CPUShares=100

[Install]
WantedBy=default.target

然後我做了sudo systemctl start idiot.service; top | grep idiot,不出所料地告訴我idiot使用了 100% 的 CPU。現在,根據link,我們應該可以通過以下方式限制該服務的資源:

sudo systemctl set-property idiot.service CPUShares=100
sudo systemctl daemon-reload
sudo systemctl restart idiot.service

我做了,然後是top. 但這仍然告訴我idiot正在使用 100% 的 CPU!我究竟做錯了什麼?

注意:我也嘗試添加CPUShares=100到單元文件中,但無濟於事

根據man systemd.resource.controlCPUShares=weight將按如下方式工作:

可用 CPU 時間相對於它們的 CPU 時間份額權重在一個切片內的所有單元之間進行分配。

由於您沒有告訴我們同一切片的其他成員,我認為沒有其他成員,因此服務使用所有 CPU 是合適的。

如果您想玩 CPU 控制,請嘗試CPUQuota=20%. 該指令的記錄如下:

CPUQuota=20% 確保執行的程序永遠不會在一個 CPU 上獲得超過 20% 的 CPU 時間。

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