Linux-linux下有没有办法控制某个进程的CPU使用率?

Linux-linux下有没有办法控制某个进程的CPU使用率?

想挽留 发布于 2017-10-03 字数 166 浏览 1163 回复 2

用top查看系统状况时会发现有些进程的CPU使用率居高不下,在70%以上,这样就影响了系统的整体性能。请问下有没有办法控制指定的进程的CPU使用率不超过某个阈值,比如50%?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

归属感 2017-11-03 2 楼

在系统级别来单独控制CPU的占用率是不现实的,系统管理者进程的调度,系统以上的方法只能通过修改进程优先级和提高线程占用时间来提供对CPU的占用,但在系统级别上,系统内核还是要保证系统的所有进程都有机会使用CPU的硬件资源,特别LINUX是多用户多任务系统,更不可能把硬件资源一直分配个某一个进程,这个理论是不支持的,但对于实时操作系统就可以做到这一点,理论归理论,但在实际应用中我们可以粗略的估计,控制CPU的占用率。

int main()
{
bool temp = true;
int busyTime = 0; //忙的时间
int idleTime = 0; //空闲时间
long timeuse = 0; //实际循环用的时间
int cpucoe = 0; //CPU占用率
struct timeval tpstart,tpend;

printf( "lease input CPU busyTime:";
scanf("%d",&busyTime);
while(temp)
{
if ((busyTime <= 0))
{
printf("Input Error!Please input CPU busyTime:";
scanf("%d",&busyTime);
}
else
{
temp = false;
}
}

temp = true;
printf( "lease input CPU coefficient(0 to 100):";
scanf("%d",&cpucoe);

while(temp)
{
if ((cpucoe > 100) || (cpucoe <= 0))
{
printf("Input Error!Please input CPU coefficient(0 to 100):";
scanf("%d",&cpucoe);
}
else
{
temp = false;
}
}

printf("If you want to interrputctrl + c)n";
while (1)
{
gettimeofday(&tpstart,NULL); //得到当前的系统时间
while (timeuse <= busyTime)
{
gettimeofday(&tpend,NULL);
timeuse = 1000000 * (tpend.tv_sec - tpstart.tv_sec) + (tpend.tv_usec - tpstart.tv_usec);
timeuse /= 1000; //转换成ms
}

idleTime = ((100 * busyTime) / cpucoe) - busyTime;

sleep(idleTime / 1000); //转化成ms
}

return 0;
}

夜无邪 2017-10-07 1 楼

通过外部工具或命令限制程序的cpu使用率毕竟是治标不治本的办法,cpulimit还是nice、renice这些设置进程的优先级的命令,如果因此牺牲了程序的可用性,那还是不可取的,我们平时在开发时,遇到这中程序占用cpu很高的情况,一般可以用各种profiler找到占CPU时间最长的方法,找出程序造成cpu使用率居高的原因,然后改进算法。