Systemd
為什麼使用 CPUShares 屬性時這個 systemd 服務資源不受限制?
好吧,為了讓我的手弄髒 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.control
,CPUShares=weight
將按如下方式工作:可用 CPU 時間相對於它們的 CPU 時間份額權重在一個切片內的所有單元之間進行分配。
由於您沒有告訴我們同一切片的其他成員,我認為沒有其他成員,因此服務使用所有 CPU 是合適的。
如果您想玩 CPU 控制,請嘗試
CPUQuota=20%
. 該指令的記錄如下:CPUQuota=20% 確保執行的程序永遠不會在一個 CPU 上獲得超過 20% 的 CPU 時間。