免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5263 | 回复: 11
打印 上一主题 下一主题

求助:程序占用CPU80%以上。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-02 10:50 |只看该作者 |倒序浏览
一个C编译的程序,以前在HPUX上运行的时候,是正常的,用了下面的代码。
后来迁移到Linux服务器上,把这段代码(循环里面的)注释掉了,运行后却占用CPU达80%以上,甚至90%,但是如果有别的程序,比如strace运行的时候,CPU会降下来到20%左右。
各位大虾,能否给些建议。我初学C编程,不知道怎么入手解决。

int main(int argc, char *argv[])
{
int                 r;
  fd_set rdmask;
  struct timeval timeout;
  int sp;
  timeout.tv_sec = 0;
  while (TRUE)
  {
   FD_ZERO(&rdmask);
    FD_SET(sp,&rdmask);
    timeout.tv_usec = 5;
    r = select(sp + 1, (fd_set *)&rdmask, (fd_set *)0, (fd_set *)0, &timeout);
    if (r < 0 && errno != EINTR) error_out ("Cannot perform select", errno);
    if ( r > 0 && FD_ISSET(sp,&rdmask))
      handle_ovspmd_msg();
......
}

论坛徽章:
0
2 [报告]
发表于 2010-11-02 11:02 |只看该作者
select是在规定时间内阻塞的,阻塞的话这段程序就在等待时间过完或者发生了事件之后才会执行。在阻塞的时候是不占用CPU的,你把它注释掉,就成了死循环,程序一直空转,所以会占用那么多CPU。

论坛徽章:
0
3 [报告]
发表于 2010-11-02 11:02 |只看该作者
在while的最后面加上usleep(10);

论坛徽章:
0
4 [报告]
发表于 2010-11-02 11:11 |只看该作者
2l正解

论坛徽章:
0
5 [报告]
发表于 2010-11-02 11:24 |只看该作者
谢谢各位,我把那段又恢复了,也加上了usleep(10); 不过程序abort了,log里面显示“Cannot perform select   9”,我查了下是文件描述符无效,这是怎么回事呢?是select用的不对吗?

论坛徽章:
0
6 [报告]
发表于 2010-11-02 11:27 |只看该作者
sp是有效的文件描述符么?

论坛徽章:
0
7 [报告]
发表于 2010-11-02 13:19 |只看该作者
没有sleep的死循环拉,这是最占cpu的

其他程序占cpu了么,自然就占得少了咯

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
8 [报告]
发表于 2010-11-02 13:27 |只看该作者
变量sp都没初始化

论坛徽章:
0
9 [报告]
发表于 2010-11-02 14:19 |只看该作者
非常感谢大家的帮忙,刚才重新编译了下,在Linux平台下,sp不需要初始化,只要加上usleep(10); 运行后CPU可以保持在5%以内。在HP 11.31下,sp必须要初始化为0,否则会abort, 再usleep(10);运行后CPU可以保持在6%以内。目前看起来high CPU的问题解决了,不知道会不会还有隐性的问题出来,还需要进一步测试其他功能有没有影响。有的话再来向各位请教。

论坛徽章:
0
10 [报告]
发表于 2010-11-02 16:04 |只看该作者
回复 9# xuezhilei40308


    sp不需要初始化!!!!你还是看看第一个参数到底是什么意思吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP