Linux下TCP延迟重庆时 时 彩源码下载确认(Delayed Ack)机制导致的时延问题分析

重庆时 时 彩下载联系方式:QQ:2747044651 网址在实际测试中发现,当N大于等于3的情况,第2秒之后,每次第三个recv调用,总会阻塞40毫秒左右,但在分析Server端日志时,发现所有请求在Server端处理时耗均在2ms以下。

当时的具体定位过程如下:先试图用strace跟踪客户端进程,但奇怪的是:一旦strace attach上进程,所有收发又都正常,不会有阻塞现象,一旦退出strace,问题重现。经同事提醒,很可能是strace改变了程序或系统的某些东西(这个问题现在也还没搞清楚),于是再用tcpdump抓包分析,发现Server后端在回现应答包后,Client端并没有立即对该数据进行ACK确认,而是等待了近40毫秒后才确认。经过Google,并查阅《TCP/IP详解卷一:协议》得知,此即TCP的延迟确认(Delayed Ack)机制。

其解决办法如下:在recv系统调用后,调用一次setsockopt函数,设置TCP_QUICKACK。最终代码如下:

char sndBuf[132];

char rcvBuf[132];

while (1) {

for (int i = 0; i < N; i++) {

    send(fd, sndBuf, 132, 0);

    ...    

}

for (int i = 0; i < N; i++) {

    recv(fd, rcvBuf, 132, 0); 

    setsockopt(fd, IPPROTO_TCP, TCP_QUICKACK, (int[]){1}, sizeof(int)); 

}

sleep(1);

}
案例二:在营销平台内存化CDKEY版本做性能测试时,发现请求时耗分布异常:90%的请求均在2ms以内,而10%左右时耗始终在38-42ms之间,这是一个很有规律的数字:40ms。因为之前经历过案例一,所以猜测同样是因为延迟确认机制引起的时耗问题,经过简单的抓包验证后,通过设置TCP_QUICKACK选项,得以解决时延问题。

延迟确认机制
在《TCP/IP详解卷一:协议》第19章对其进行原理进行了详细描述:TCP在处理交互数据流(即Interactive Data Flow,区别于Bulk Data Flow,即成块数据流,典型的交互数据流如telnet、rlogin等)时,采用了Delayed Ack机制以及Nagle算法来减少小分组数目。

书上已经对这两种机制的原理讲的很清晰,这里不再做复述。本文后续部分将通过分析TCP/IP在Linux下的实现,来解释一下TCP的延迟确认机制。

1.为什么TCP延迟确认会导致延迟?
其实仅有延迟确认机制,是不会导致请求延迟的(初以为是必须等到ACK包发出去,recv系统调用才会返回)。一般来说,只有当该机制与Nagle算法或拥塞控制(慢启动或拥塞避免)混合作用时,才可能会导致时耗增长。我们下面来详细看看是如何相互作用重庆×××源码下载联系方式:QQ:2747044651 网址【http://zhengtuwl.com

原文地址:http://blog.51cto.com/13930728/2161832

时间: 2024-10-13 22:14:55

Linux下TCP延迟重庆时 时 彩源码下载确认(Delayed Ack)机制导致的时延问题分析的相关文章

Linux下TCP延迟确认(Delayed Ack)机制导致的时延问题分析

版权声明:本文由潘安群原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/105 来源:腾云阁 https://www.qcloud.com/community 案例一:同事随手写个压力测试程序,其实现逻辑为:每秒钟先连续发N个132字节的包,然后连续收N个由后台服务回显回来的132字节包.其代码简化如下: char sndBuf[132]; char rcvBuf[132]; while (1) { for (int i

腾讯云分布式牛 彩源码下载高可靠消息队列 CMQ 架构

牛彩源码下载联系方式:QQ:2747044651 网页在分布式大行其道的今天,我们在系统内部.平台之间广泛运用消息中间件进行数据交换及解耦.CMQ是腾讯云内部自研基于的高可靠.强一致.可扩展分布式消息队列,在腾讯内部包括微信手机QQ业务红包.腾讯话费充值.广告订单等都有广泛使用.目前已上线腾讯云对外开放,本文对腾讯云CMQ 核心技术原理进行分享介绍. CMQ消息队列主要适用于金融.交易.订单等对可靠性.可用性有较高要求的业务场景. 以腾讯充值系统为例,该充值系统通过CMQ 对交易模块.发货部分.

MySQL 数据库牛 彩源码下载设计总结

牛彩源码下载联系方式:QQ:2747044651网址请添加链接描述注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节.另外MyISAM数据和索引是分开,而InnoDB的数据存储是按聚簇(cluster)索引有序排列的,主键是默认的聚簇(cluster)索引,因此MyISAM虽然在一般情况下,查询性能比InnoDB高,但InnoDB的以主键为条件的查询性能是非常高的. 规则2:命名规则. 数据库和表名应尽可能和所服务的业务模块名一致服

杏彩源码下载(龙虎和+手机)

杏彩源码下载(龙虎和+手机)http://hubawl.com/thread-245-1-1.html .配置两个不同的数据源,如下(由于项目使用的是druid数据库连接,配置可以会复杂点比较): [html] view plain copy [html] view plain copy 2.定义一个类继承AbstractRoutingDataSource实现determineCurrentLookupKey方法,该方法可以实现数据库的动态切换,如下: [java] view plain cop

如何使用私有分 分彩源码下载网络部署全球同服游戏服务

近年来,分 分彩源码下载联系方式:QQ:2747044651 网址随着移动互联网技术和全球社交化的发展,全球同服的玩法越来越受到游戏玩家的喜爱,最火爆的如<皇室战争>自16年3月份发布来便长期霸榜,支持全球同服的游戏架构在知乎上一度引起热议,面对国内各游戏厂家出海和全球运营需求,腾讯云利用分布在全球的云基础设施和互联的VPC网络为游戏服务的全球部署提供了一套完整解决方案. 通常而言,全球同服的游戏架构都具有以下几个特点: 核心数据集中部署:用户账号数据.游戏核心数据.排行榜等全局类数据一般集中

Linux下利用phpize安装memcashe的php源码扩展包

phpize是php的一种构建工具,为PHP扩展准备构建环境,通过phpize可以编译php的扩展源码文件为php扩展模块. 一.安装 phpize工具可以通过安装php-dev包自动集成安装.安装完成后php的bin目录下会有phpize这个命令. 二.使用 举例:在原来编译好的php中加入memcache扩展模块,使用phpize构建的方式如下. tar zxvf memcache-2.2.5.tgz cd memcache-2.2.5/ /usr/local/php/bin/phpize

linux下支持laravel和apache的php源码编译

方法: 1) wgethttp://mirrors.sohu.com/php/php-5.6.9.tar.gz 2)  进入解压后的php源码目录,执行./configure --enable-fpm --enable-mbstring --with-apxs2=/usr/local/apache2/bin/apxs --with-mcrypt --with-pdo_mysql --with-openssl --disable-fileinfo 3)执行make && make insta

PHP基于MVC模式下的停车场车位管理系统、448源码下载

大家好,我是全微毕设团队的创始人,本团队擅长JAVA(SSM,SSH,SPRINGBOOT).PYTHON.PHP.C#.安卓等多项技术. 今天将为大家分析一个停车场车位管理系,统本系统的设计是基于php+apache+mysql的方式设计,以zendstudio和mysql5.1.2为开发工具,并运用Photoshop CS6技术美化界面,辅之以CSS技术,本系统是基于面向对象编程的web应用程序.至今为止,越来越多停车场管理停车业务都已经实现了软件化的管理功能,提高了业务的运营工作效率,停车

PHP基于MVC模式下的幕仇美食网站、源码下载

大家好,我是全微毕设团队的创始人,本团队擅长JAVA(SSM,SSH,SPRINGBOOT).PYTHON.PHP.C#.安卓等多项技术. 今天将为大家分析一个幕仇美食网站,本项目是通过MVC框架技术来进行设计和实现的,项目主要用到的技术有php,javascript,html/css等,数据库使用的是MySQL. 现如今先进科学技术高速发展,计算机技术已经被社会的各个领域广泛应用.随着计算机技术和通信技术的迅猛发展,互联网的规模也逐步增大,互联网的元素也随之逐渐增加,可以利用其发展通信,也可以