Bash:限制具有指定名称的所有进程的CPU使用

Bash:限制具有指定名称的所有进程的CPU使用,bash,centos,cpu-usage,Bash,Centos,Cpu Usage,我正在CentOS 6.3 x64机器上运行JVM实例。有时,一台机器的CPU使用率很高,I/O阻塞了整个机器 如何将所有Java进程的使用限制在单个核心上?还是两个核心?还是按规定 我尝试了cpulimit,但它无法用于多个内核以及同名的多个进程 有没有一种简单的方法来限制指定名称的所有进程的CPU使用率?好吧,我认为您所需要的就是(找到PID)和。然后根据您的需要,您可以(作为超级用户)运行以下操作: for pid in $(pgrep <pattern>); do tas

我正在CentOS 6.3 x64机器上运行JVM实例。有时,一台机器的CPU使用率很高,I/O阻塞了整个机器

如何将所有Java进程的使用限制在单个核心上?还是两个核心?还是按规定

我尝试了
cpulimit
,但它无法用于多个内核以及同名的多个进程


有没有一种简单的方法来限制指定名称的所有进程的CPU使用率?

好吧,我认为您所需要的就是(找到PID)和。然后根据您的需要,您可以(作为超级用户)运行以下操作:

for pid in $(pgrep <pattern>);
do
  taskset -p 0x00000001 $pid
done
pid的
,单位为美元(pgrep);
做
任务集-p 0x00000001$pid
完成
有关如何使用它的更多信息,请参阅
任务集
手册页。您可能需要安装
schedutils
软件包

当然,您可以通过修改处理器掩码(即您分配的CPU)来改变该方案,以满足您所需的任何复杂性


我应该补充一点,我认为
cpuset
(假设您的意思是,我不知道名为
cpulimit
的工具,但这并不意味着什么)使用相同的底层机制。因此,正如您过去的尝试一样,这可能是徒劳的。

好吧,我认为您所需要的只是(找到PID)和。然后根据您的需要,您可以(作为超级用户)运行以下操作:

for pid in $(pgrep <pattern>);
do
  taskset -p 0x00000001 $pid
done
pid的
,单位为美元(pgrep);
做
任务集-p 0x00000001$pid
完成
有关如何使用它的更多信息,请参阅
任务集
手册页。您可能需要安装
schedutils
软件包

当然,您可以通过修改处理器掩码(即您分配的CPU)来改变该方案,以满足您所需的任何复杂性


我应该补充一点,我认为
cpuset
(假设您的意思是,我不知道名为
cpulimit
的工具,但这并不意味着什么)使用相同的底层机制。因此,正如您过去的尝试一样,这可能是徒劳的。

我在单个进程上使用了
taskset
,但它仍然使用多达3个线程。你会知道为什么吗?@hexa氰化物:不,我不知道,因为我不知道确切的程序(即使我知道了,也可能没有什么区别)。但是线程是进程内部的“实体”。实际上,每个进程至少有一个线程(技术上)。线程是执行“指令线程”的东西,形象地说,而进程是提供内存空间的容器等等。但是,使用
taskset
时,所有这些线程仍将限于使用您在处理器掩码中分配的CPU或CPU…我在单个进程上使用了
taskset
,但它最多仍使用3个线程。你会知道为什么吗?@hexa氰化物:不,我不知道,因为我不知道确切的程序(即使我知道了,也可能没有什么区别)。但是线程是进程内部的“实体”。实际上,每个进程至少有一个线程(技术上)。线程是执行“指令线程”的东西,形象地说,而进程是提供内存空间的容器等等。但是,使用
taskset
时,所有这些线程仍将限于使用您在处理器掩码中分配的CPU或CPU。。。