为什么这个 systemd 服务资源不受限制?

emb*_*sis 4 systemd cgroups

好吧,让我用 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
Run Code Online (Sandbox Code Playgroud)

然后我做了sudo systemctl start idiot.service; top | grep idiot,这可以预见地告诉我idiot使用了 100% 的 CPU。现在,根据链接,我们应该可以通过以下方式限制此服务的资源:

sudo systemctl set-property idiot.service CPUShares=100
sudo systemctl daemon-reload
sudo systemctl restart idiot.service
Run Code Online (Sandbox Code Playgroud)

我做到了,然后是top. 但这仍然告诉我idiot正在使用 100% 的 CPU!我究竟做错了什么?

注意:我也尝试添加CPUShares=100到单元文件中,但无济于事

Mar*_*erg 5

根据man systemd.resource.control,CPUShares=weight将按如下方式工作:

可用的 CPU 时间在一个切片内的所有单元之间分配,相对于它们的 CPU 时间份额权重。

由于您没有告诉我们关于同一片的其他成员,我认为没有其他成员,因此服务使用所有 CPU 是合适的。

如果你想玩 CPU 控制,试试CPUQuota=20%. 该指令记录如下:

CPUQuota=20% 确保执行的进程在一个 CPU 上的 CPU 时间永远不会超过 20%。