日期:2014-05-16  浏览次数:20711 次

linux下sleep太频繁会不会有问题
我现在开发一款视频播发服务程序,按照视频码率进行播发视频。通过每20ms计算发包的数量来控制播发视频的码率,中间用的是nanosleep来做。操作系统是RHEL 6.1(32位系统),由于我播发了几十个视频,每个视频的播发都要用到nanosleep来控制码率,当连续播发几个小时候,我的播发程序cpu占用率突然变得不稳定,正常时是20%左右,但是一出现问题,就会从4%到30%之间频繁波动,波动幅度很大。用sar -n DEV 1查看网卡的发包情况,正常情况下会在15MB/s,当时一旦出现问题时,就会出现最小0MB/s,最大80MB/s的情况,而且每次都持续5分钟左右。已经做过以下测试:
1. 更换OS为RHEL 6.2, 问题依旧
2. 全部换成内存播发同一个问题,去除I/O因素, 问题依旧。
3. 减少几个视频,问题出现的间隔从几个小时变为几天,但是还是会出现
4. 更换一个好的CPU,连续测试了几天,没有问题

难道真的和CPU有关系?我觉得可能和sleep太频繁有一定的关系,但是没有理论根据。请问有人遇到过这样的问题吗?或者从这样的现象可以判断出问题可能出在哪里。我总觉得和程序没有太大关系,换了两台机器,只是CPU好了一点,都没有问题。


------解决方案--------------------
不太清楚,要不用select模拟sleep试试?
------解决方案--------------------
与sleep太频繁有关系
写个死循环while(1){sleep(1)}cpu负载为1
一般cpu(单核)负载为3.5以上会不稳定。
cpu(24核)启动了1000个类似的程序,结果起来了400个,桌面鼠标全部卡了(不是不响应,是cpu忙不过来)

所以sleep()很费资源,慎重使用,查看你的负载是否过高。
------解决方案--------------------
啊!会有这样的问题?幸亏我的2.6.18没有出过。。。。以后要注意下了,谢谢楼主