限制子进程的总 CPU 使用率

限制子进程的总 CPU 使用率

我正在运行克伦威尔Ubuntu 18.04 上的管道执行器,根据定义,它以协调的方式运行其他程序。我正在尝试找到一种方法来对单个执行施加总 CPU 使用率限制,尤其是对那些具有散射的执行。虽然可以在 Docker 容器上尝试此操作(如果任务在容器内执行),但我想知道是否有一个好的顶级解决方案。

当我运行 Cromwell 时,它由我的用户拥有,并且是单线程的。它进一步生成的进程由 root 拥有,它们通常占用 100% 的资源,但数量可能非常多。

我尝试使用CPU限制使用 --include-children 标志为应用程序提供总共 2 个核心(总共 40 个):

sudo java -jar /nas/files/cromwell-35.jar run test.wdl --inputs test_inputs.json &
sudo cpulimit --include-children --limit=200 --pid=$!

但它对单个执行施加了限制,而不是对它们的总 CPU 使用率(总和)施加了限制:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                 
26581 root      20   0 1946776 239476  34984 R 100.0  0.1   0:10.03 suppa.py                                                                
26770 root      20   0 1939040 231784  34892 R 100.0  0.1   0:09.79 suppa.py                                                                
26811 root      20   0 1920448 213176  34636 R 100.0  0.1   0:09.36 suppa.py                                                                
27338 root      20   0 1937880 230936  35048 R 100.0  0.1   0:08.81 suppa.py                                                                
27662 root      20   0 1928868 221892  34896 R 100.0  0.1   0:08.64 suppa.py                                                                
27751 root      20   0 1920044 212844  34744 R 100.0  0.1   0:08.49 suppa.py                                                                
27786 root      20   0 1922524 215464  35064 R 100.0  0.1   0:08.03 suppa.py                                                                
27920 root      20   0 1921360 214376  35044 R 100.0  0.1   0:08.72 suppa.py                                                                
27983 root      20   0 1921224 213944  34880 R 100.0  0.1   0:08.10 suppa.py                                                                
28064 root      20   0 1899252 191972  34836 R 100.0  0.1   0:08.00 suppa.py                                                                
28482 root      20   0 1861976 154748  34844 R 100.0  0.1   0:04.89 suppa.py                                                                
28586 root      20   0 1856140 148976  34736 R 100.0  0.1   0:04.44 suppa.py                                                                
28587 root      20   0 1846516 139324  34900 R 100.0  0.1   0:04.45 suppa.py                                                                
26096 root      20   0 1950144 242780  34908 R 100.0  0.1   0:11.42 suppa.py                                                                
26442 root      20   0 1936560 229028  34692 R 100.0  0.1   0:11.50 suppa.py                                                                
27000 root      20   0 1931020 223848  34988 R 100.0  0.1   0:10.02 suppa.py                                                                
27108 root      20   0 1933736 226632  34988 R 100.0  0.1   0:09.93 suppa.py                                                                
27321 root      20   0 1923300 216092  34852 R 100.0  0.1   0:08.76 suppa.py                                                                
27565 root      20   0 1923028 215848  34780 R  99.7  0.1   0:09.07 suppa.py                                                                
19245 root       9 -11    4532    840    776 S  21.5  0.0   0:26.33 cpulimit                                                                
17119 root      20   0 50.406g 1.147g  33940 S  11.6  0.5   1:15.74 java          

我也读过有关使用组的信息,但我不确定如何做到这一点,因为我无法轻易将这些子进程与其他根进程区分开来。

是否有一个万无一失的解决方案可以将命令 + 子命令的总 CPU 时间限制为 CPU 的总百分比?

相关内容