【问题标题】:Reserve CPU time for one program?为一个程序保留 CPU 时间?
【发布时间】:2015-07-28 10:56:46
【问题描述】:

先决条件

我有一个(物理)服务器运行多个(虚拟)服务器。总共有 11 个服务器,编号 0 到 9 被调用

servinit XXXXn

其中XXXXn 是端口号,n 是服务器号。另一台服务器由

调用
apiinit

并在 8080 端口上运行。总之,有 11 个进程,其中 10 个二进制名称为 servinit,1 个为 apiinit

目标

servinit 进程必须始终响应,换句话说,apiinit 进程决不能消耗所有 CPU 时间。我想将apiinit 的总 CPU 时间限制为一个百分比数字,比如 90,以便servinit 进程始终有 10% 的 CPU 空间来完美运行。

最有效的处理方式是什么?

软件

物理服务器运行

Ubuntu Desktop
Release 12.04 (precise) 64-bit
Kernel: 3.14.32-xxxx-std-ipv6-64

【问题讨论】:

  • 你试过renice -n 19 $API_PID吗?也许这就足够了。我认为真正保留 CPU 的一部分是没有意义的。应该可以使用“cgroups”-> google 保留整个 CPU 内核

标签: linux bash shell cpu-usage


【解决方案1】:

由于您运行的是 3.14+ Linux 内核,因此您可以通过 SCHED_DEADLINE 策略轻松限制正在运行的应用程序的 CPU 份额。该策略允许您通过设置预算和周期来设置应用程序的 CPU 份额(主要是在一段时间内不允许应用程序消耗超过其预算)。例如,如果预算为 3 毫秒,周期为 10 毫秒,则应用程序最多可以消耗 30% 的 CPU。特别是,系统将保证每 10 毫秒 3 毫秒。

【讨论】:

    【解决方案2】:

    使用可选包cpulimit解决。

    例如,将apiinit 限制为 50% 的 CPU 时间(在双核 CPU 上):

    sudo cpulimit -e apiinit -l 100 &
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      • 2013-02-17
      • 2021-10-31
      相关资源
      最近更新 更多