我有一台运行多个(虚拟)服务器的(物理)服务器。共有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
答案 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 &