为一个程序预留CPU时间?

时间:2015-07-28 10:56:47

标签: linux bash shell cpu-usage

先决条件

我有一台运行多个(虚拟)服务器的(物理)服务器。共有11台服务器,数字0到9由

调用
servinit XXXXn

其中XXXXn是端口号,n是服务器号。

调用另一台服务器
apiinit

并在端口8080上运行。总之,有11个进程,10个包含二进制名称servinit,另一个包含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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

使用可选包cpulimit解决。

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

sudo cpulimit -e apiinit -l 100 &