我在桌面上创建了一个 CGROUP,名为背景。此组的目的是在 10% 的 CPU 限制内运行我的所有 sysadmin 脚本。每次重新启动时都会使用以下 cronjob 创建该组:
@reboot /usr/bin/cgcreate -t jerzy:jerzy -a jerzy:jerzy -g cpu:background && /usr/bin/cgset -r cpu.cfs_period_us=1000000 background && /usr/bin/cgset -r cpu.cfs_quota_us=100000 background
尽管有这个限制,我仍然想要我的系统管理脚本,它已经受到限制执行程序,永远不要优先于我的其余流程。因此我决定使用好的命令,如下例所示:
cgexec -g cpu:background nice -19 prependPollen.py
是执行程序在上面的命令中将资源限制为prependPollen.py或仅至好的?
更一般:使用执行程序仅将资源限制为紧随其后的一个命令执行程序命令?这同样适用于好的?
nice -19 cgexec -g cpu:background prependPollen.py
像上面的命令一样交换顺序会对 CPU 使用/限制产生任何影响吗?两者都可以好的和执行程序可以在同一个命令/cronjob 中使用吗?
PS 我的环境:Bash、Debian 10 LTS。
答案1
这两个命令都是准备命令,在保留它们更改的属性的同时执行以下命令。因此,只要更改的属性不会对另一个属性产生任何副作用(这对这两个属性来说就很好),这里的顺序并不重要。
cgexec -> nice -> final executable
nice
将下面要执行的流程移动到相关的组组并将nice
改变最终可执行文件的性能(同时保留 cgroup)。
nice -> cgexec -> final executable
将更改后续进程的良好性cgexec
,并将cgexec
最终的可执行文件放入相关的 cgroup 中(同时保持良好性)。
两个命令都会产生相同的结果。两个属性(组组和善良)会自动传播到以下进程的所有子进程。所以无论产生什么prependPollen.py
都会在中央处理器:背景也有改变的美好。
任何其他类似的命令都可以插入到该管道中的任何位置。例如ionice -c 3
可以添加在第一、第二或第三位置,以尝试限制 python 程序对其他进程的 I/O 影响(同时也有cgroups为此做得更好,通常需要cgroupsv2 才能正常工作)。