Linux中如何限制一个进程只能使用一个CPU核心?

Linux中如何限制一个进程只能使用一个CPU核心?

如何将进程限制在一个CPU核心上?

类似ulimitor 的东西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 稍后您可以为这些分配(运行)进程。

相关内容