这种情况的发生非常偶然,偶的试验室在进行这项测试时仅仅出现一次!急切盼望得到高手指点!
9 个解决方案
#1
看测试环境.如果是非内网,在互联网上测试,这一点不奇怪.双方的通信在几秒内突然断开或持续上一会,或者双方通信速度突然变得很慢这些情况,也是常有出现的.
#2
补充一下,我的测试环境非常干净,收发节点通过三层交换机连接
#3
也许是交换机的问题
#4
在测试过程中,使用网络抓包软件进行了交换机端口抓包,并没有出现阻塞现象
#5
在测试过程中,使用网络抓包软件进行了交换机端口抓包,并没有出现阻塞现象
#6
在测试过程中,进行对交换机端口抓包,并没有出现堵塞的状况
#7
这种情况,一般情况不要找系统的原因,90%是你代码的问题,能查的地方有以下几个方面:
1,接受段的线程有无被阻塞的可能
2,接收段的速度是否足够快,是否是select一通知,就马上接了
3,你写log的时间跟你收到数据的时间是否一致。
1,接受段的线程有无被阻塞的可能
2,接收段的速度是否足够快,是否是select一通知,就马上接了
3,你写log的时间跟你收到数据的时间是否一致。
#8
veldwolf 的分析不错,
ioctlsocket()之后,接受线程sleep(10),之后rev(),rev后立即写log,接受段的线程无被阻塞的代码,这项测试已经连续持续1个月,仅仅出现1次10秒左右的阻塞.我自己倾向于ioctlsocket()内部的情况
ioctlsocket()之后,接受线程sleep(10),之后rev(),rev后立即写log,接受段的线程无被阻塞的代码,这项测试已经连续持续1个月,仅仅出现1次10秒左右的阻塞.我自己倾向于ioctlsocket()内部的情况
#9
写log如果是用接收线程直接向硬盘写文件,则这个接受线程在微观上就是阻塞的,因为写磁盘是比较慢的,比较常用的做法是,写log的线程和接受线程分开,任何情况下接受线程所能操作的都因该只是内存,这样保证接受足够的块,另外查看你在接受数据的时候,是否频繁的分配了内存,这里也是可以优化的地方
#1
看测试环境.如果是非内网,在互联网上测试,这一点不奇怪.双方的通信在几秒内突然断开或持续上一会,或者双方通信速度突然变得很慢这些情况,也是常有出现的.
#2
补充一下,我的测试环境非常干净,收发节点通过三层交换机连接
#3
也许是交换机的问题
#4
在测试过程中,使用网络抓包软件进行了交换机端口抓包,并没有出现阻塞现象
#5
在测试过程中,使用网络抓包软件进行了交换机端口抓包,并没有出现阻塞现象
#6
在测试过程中,进行对交换机端口抓包,并没有出现堵塞的状况
#7
这种情况,一般情况不要找系统的原因,90%是你代码的问题,能查的地方有以下几个方面:
1,接受段的线程有无被阻塞的可能
2,接收段的速度是否足够快,是否是select一通知,就马上接了
3,你写log的时间跟你收到数据的时间是否一致。
1,接受段的线程有无被阻塞的可能
2,接收段的速度是否足够快,是否是select一通知,就马上接了
3,你写log的时间跟你收到数据的时间是否一致。
#8
veldwolf 的分析不错,
ioctlsocket()之后,接受线程sleep(10),之后rev(),rev后立即写log,接受段的线程无被阻塞的代码,这项测试已经连续持续1个月,仅仅出现1次10秒左右的阻塞.我自己倾向于ioctlsocket()内部的情况
ioctlsocket()之后,接受线程sleep(10),之后rev(),rev后立即写log,接受段的线程无被阻塞的代码,这项测试已经连续持续1个月,仅仅出现1次10秒左右的阻塞.我自己倾向于ioctlsocket()内部的情况
#9
写log如果是用接收线程直接向硬盘写文件,则这个接受线程在微观上就是阻塞的,因为写磁盘是比较慢的,比较常用的做法是,写log的线程和接受线程分开,任何情况下接受线程所能操作的都因该只是内存,这样保证接受足够的块,另外查看你在接受数据的时候,是否频繁的分配了内存,这里也是可以优化的地方