好吧,让我亲自动手使用 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
CPU 利用率为 100%。现在,根据关联,我们应该能够通过以下方式限制该服务的资源:
sudo systemctl set-property idiot.service CPUShares=100
sudo systemctl daemon-reload
sudo systemctl restart idiot.service
我这样做了,然后是top
.但这仍然告诉我idiot
CPU 利用率为 100%!我究竟做错了什么?
注意:我也尝试添加CPUShares=100
到单元文件中,但无济于事
答案1
根据man systemd.resource.control
,CPUShares=weight
将按如下方式工作:
可用 CPU 时间根据 CPU 时间共享权重在一个切片内的所有单元之间分配。
由于您没有告诉我们有关同一切片的其他成员的任何信息,因此我认为没有其他成员,因此服务使用所有 CPU 是合适的。
如果你想玩CPU控制,试试CPUQuota=20%
。该指令的记录如下:
CPUQuota=20% 确保执行的进程在一个 CPU 上永远不会获得超过 20% 的 CPU 时间。