免费注册 查看新帖 |

Chinaunix

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

[C++] 诡异的间隔为1秒的Timer线程长达2分钟不工作的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-22 14:40 |只看该作者 |倒序浏览
最近在做优化一个线上数据服务器的工作,该服务器为运行在CentOS4.6上的用C++写的多线程程序, 程序有1个接收UDP网络数据包的线程,2个处理数据包的线程,1个发送UDP数据包的线程,1个epoll的线程实现TCP的收和发以及1个间隔为1秒的timer线程,这个线程定时打印一些统计信息到日志里。通过分析大概跑了一天的日志,发现其中有些异常的地方,日志里曾出现过一些长达2分钟的中断,比如03:28:03,03:28:04然后一下子跳到了03:30:03,而这个时间段也发现处理数据包的线程处理能力明显大幅度降低。

timer线程类似于
while(1)
{
    write log();
    sleep(1);
}

刚开始怀疑可能是usleep(它不是线程安全的)的问题,改成nanosleep以后问题依旧出现
又想到会不会是NTP时间同步引起时间的跳跃,之后也排除了它的影响,因为NTP是每天的20时进行的,而问题是在3:30发生的
后来又做了很多的调整,可还是出现这个问题,困惑的很,请大家帮忙分析一下。。。

论坛徽章:
0
2 [报告]
发表于 2009-05-22 16:06 |只看该作者
阻塞了

论坛徽章:
0
3 [报告]
发表于 2009-05-22 16:26 |只看该作者

回复 #2 redor 的帖子

2楼的能说的详细一些么?一个线程不可能2分钟都不被调度吧。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
4 [报告]
发表于 2009-05-22 16:29 |只看该作者
系统太忙,sleep(1)只能保证1s之后返回,但是不保证1s以后多久,可能是0s,也可能是0.3s,也可能是三年五载

论坛徽章:
0
5 [报告]
发表于 2009-05-22 16:31 |只看该作者
原帖由 xinglp 于 2009-5-22 16:29 发表
系统太忙,sleep(1)只能保证1s之后返回,但是不保证1s以后多久,可能是0s,也可能是0.3s,也可能是三年五载

精辟! 阿娇!!! 哈哈哈

论坛徽章:
0
6 [报告]
发表于 2009-05-22 16:37 |只看该作者
其实2分钟没有输出日志只是一种表象,而数据处理线程在这段时间内几乎丧失了处理能力,我真正关心的是什么原因导致了这种情况呢

论坛徽章:
0
7 [报告]
发表于 2009-05-22 16:57 |只看该作者
这种情况可能难于查找哦,考虑写个中断服务看看,就是超时到的处理函数。我不知道多线程可不可以哈,多进程是肯定可以的哈。

[ 本帖最后由 blackuhlan 于 2009-5-22 16:59 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-05-22 17:34 |只看该作者
也有可能其它进程抢用了大量CPU。
比如在windows下,当扫描病毒或玩3D游戏时,如果电脑配置不够好,经常会导致其它程序如mp3播放器卡死。。

论坛徽章:
0
9 [报告]
发表于 2009-05-22 17:51 |只看该作者

回复 #1 fanxuetang 的帖子

楼主大大,你给的代码
while(1)
{
    write log();
    sleep(1);
}
就这几行来看,sleep(1)不要去怀疑,这个是系统控制的。一定会准时完成,
那就剩writelog了。查writelog吧。一定是它消耗了时间。不要把问题想的太复杂。
仔细看看writelog里,存在哪些隐患。

论坛徽章:
0
10 [报告]
发表于 2009-05-25 17:39 |只看该作者
回9楼:
write log()很简单就是往文件里写几行字而已,不可能有什么问题的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP