如何将进程限制在一个CPU核心上?
类似ulimit
or 的东西cpulimit
会很好。 (只是为了确保:我不想限制使用百分比或执行时间。我想强制应用程序(及其所有子进程、进程(线程))使用一个 cpu 核心(或“n”个 cpu 核心))。
答案1
在Linux下,执行sched_setaffinity
系统调用。进程的亲和性是它可以运行的处理器集。有一个标准的外壳包装器:taskset
。例如,要将进程固定到 CPU #0(您需要选择特定的 CPU):
taskset -c 0 mycommand --option # start a command with the given affinity
taskset -c -pa 0 1234 # set the affinity of a running process
Perl 都有第三方模块(Sys::CpuAffinity
)和Python(affinity
) 设置进程的亲和力。这两者都可以在 Linux 和 Windows 上运行(Windows 可能需要其他第三方模块Sys::CpuAffinity
);Sys::CpuAffinity
也适用于其他几个 UNIX 变体。
如果要从进程诞生之日起就设置进程的亲和力,请在调用 之前立即设置当前进程的亲和力execve
。这是一个简单的包装器,它强制进程在 CPU 0 上执行。
#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV
答案2
您也可以在命令行上构建 cpu 集。man cpuset
稍后您可以为这些分配(运行)进程。