前景提要:此问题不定适用Browser通信方式,主要提供给通信发生异常时解决思路。

Q: request请求创建过程发生延迟

【Scene】:

​ .Net的HttpWebRquest.GetRequestStreamAsync()执行前后偶发延迟(时间尝试2分钟左右),客户端也未捕获通信异常。

【Env】:

​ Platform: .Net

​ Http Version: v1.1

【Analyze】:

1)抓包:

​ Description:通过抓包可以看到一次完整的通信过程:

​ 1)建立三次握手

​ 2)POST通信发送信息

​ 3)响应HTTP 200,获取响应信息

​ 4)四次挥手,关闭连接。

​ 可以看到在第四部客户端和服务端都进行尝试关闭连接的过程中发生了异常,服务端返回的500错误,第二条通信建立第三次握手则就出现了延迟。

A:这是个综合性问题,根本的解决问题,需要客户端和服务端都进行优化和修改。

【Conclusion】:

​ 初步分析,大概由于以下几方面问题影响:

  1. 客户端使用的是http1.1存在队头阻塞问题,则会出现下个请求等待上一个异常通信连接关闭后才能正常运行,连接关闭的需要等待的时为2MSL。

  2. 服务端由于未对异常通信进行及时关闭和销毁,保持了大量的TIME_WAIT和CLOSE_WATI状态,则导致越繁的出现通信异常。

【Solution】:

客户端:

​ 1)取消使用using(request.GetRequestStreamAsync()),使用

try{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.GetRequestStreamAsync();
request.dispose();
}catch(ex){
//再次对request队形进行终止,预测会关闭异常的连接。
//此种方式因未有环境实际测试,实在抱歉,望有尝试此方案的人给予答复是否可行
request.abort();
request=null;
}

​ 因为using(request.GetRequestStreamAsync())方式等效try{}catch(error){}finally{request.dispose()},若request.disponse()发生异常则无法捕捉错误,这也就是抓包中看到的四次挥手发生异常但未有异常日志记录的原因。

其他提供性能方案:

​ a. 使用HttpClient 和指定HTTP 2.0,因为HTTP 2.0可以多路复用可以减少此种方式

​ b. 设置ServicePointManager.DefaultConnectionLimit = 1024; //此数据并不是最优数值,可根据各自环境进行设置。

​ c. 关闭proxy代理:https://www.cnblogs.com/TianFang/archive/2011/09/18/2180741.html,可优化首次简历request连接的时间。

服务端:

​ 1)处理TIME_WAIT和CLOSE_WAIT状态:参见:https://www.cnblogs.com/felixzh/p/8351366.html

​ 2)若服务端接收到异常通信时,则需要发送connection:close;来进行主动关闭异常连接

​ 3)设置服务端MSL时间

HttpWebRquest.GetRequestStreamAsync()发生延迟的更多相关文章

  1. mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理

    转自:http://www.cnblogs.com/kevingrace/p/6261091.html 在mysql工作中接触最多的就是mysql replication mysql在复制方面还是会有 ...

  2. corefx 源码追踪:找到引起 SqlDataReader.ReadAsync 执行延迟的那行代码

    最近遇到一个非常诡异的问题,在一个 ASP.NET Core 2.2 项目中,从 SQL Server 数据库查询 100 条数据记录,会出现 16-22s 左右的延迟.延迟出现在执行 SqlData ...

  3. Singleton(单例模式)的一种实现 -- 基于【惰性】适用于【大对象】的一种生产实践

    一.说明 本文中的代码类,在生产中使用了很长的时间,曾应用于多个企业多个项目实践中,其中也踩了不少坑,总结了一些适用的业务情景, 重要的事情说三遍: a.本代码类不是万能药,不要在业务情景中滥用! b ...

  4. Quartz任务调度基本使用

    转自:http://www.cnblogs.com/bingoidea/archive/2009/08/05/1539656.html 上一篇:定时器的实现.Java定时器Timer和Quartz介绍 ...

  5. LoadRunner测试结果分析03 转载至zhangzhe的新浪博客

    LoadRunner测试结果分析之我见 前面分析的Web Resource(网络资源)的测试情况,其主要关注的是服务器性能,而系统本身和环境都有可能存在问题,页面诊断(Web Page Diagnos ...

  6. MySQL 5.7系列之sys schema(2)

    0.导读 MySQL 5.7引入了sys schema,有了它,我们排查分析一些问题时将更得心应手.sys schema里主要存储的是视图.存储过程.函数等. 视图:用于结果的汇总展示及配置持久化: ...

  7. 解决服务器Active Directory环境里Windows登录性能问题办法

    Windows登录性能因素 当查找登录性能问题的原因时,考虑大量因素很重要.一些因素包括: 域控制器太接近用户 网络连接与可用的带宽 数据中心上的硬件资源(x64 vs.x86.内存等) 应用于用户和 ...

  8. Replication的犄角旮旯(四)--关于事务复制的监控

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  9. What every programmer should know about memory 笔记

    What every programmer should know about memory, Part 1(笔记) 每个程序员都应该了解的内存知识[第一部分] 2.商用硬件现状      现在硬件的 ...

随机推荐

  1. LeetCode 11月第2周题目汇总

    开源地址:点击该链接 前言 最近比较忙,这周几乎没有刷题,只刷了6道题~ 题目汇总 0387_first_unique_character_in_a_string类似的题目比较多了,字符串中找出特别的 ...

  2. Redis来啦~~

    一. 先聊点别的 1. sql & nosql sql指关系型数据库,如Oracle,MySQL等,nosql泛指非关系型数据库,如MongoDB,Redis等:SQL数据存在特定结构的表中, ...

  3. ERP系统到底能做什么?

    ERP的定义:在先进的企业管理思想的基础上,应用信息技术实现对整个企业资源的一体化管理. 关键词:信息技术 先进的管理思想 企业资源一体化: 那么,ERP系统在企业日常经营管理中到底能做什么? 1.在 ...

  4. 集合系列 Queue(十):LinkedList

    我们之前在说到 List 集合的时候已经说过 LinkedList 了.但 LinkedList 不仅仅是一个 List 集合实现,其还是一个双向队列实现. public class LinkedLi ...

  5. vc6.0 绿色版 下载地址

    最新版的vs2019已经完全不支持生成运行在xp下的应用程序 每次在xp下测试,都需要配置好vc6.0,但乱七八糟的太多了,给出地址,绿色版可用 http://www.downcc.com/soft/ ...

  6. .net core 3.0web_razor page项目_使用中间件接受大文件上传报错_httpRequest.Form threw an exception of type Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException_Request body too large

    前言:在web项目的.net framework时文件上传时,自己常用一般处理程序接受上传文件,上传文件的大小限制是可以项目的webconfig里配置.   到core项目使用一般处理程序变成了中间件 ...

  7. 设计模式之单例模式(Java)

    单例模式 问题 多线程操作同一对象保证对象的一致性 解决思路 只有一次实例化过程,产生一个实例化对象,并提供返回该对象的方法. 单例模式的分类 1 饿汉式 在加载类的时候就产生实例对象 public ...

  8. C++调用bat并实现传值

    1.设置环境变量,这一类为路径 C++ void bat(const string& sDirC, const string& sDirD) { char Ddir[256]; Ddi ...

  9. Custom Diagrams

    Custom Diagrams https://github.com/dbeaver/dbeaver/wiki/Custom-Diagrams You can create custom ER dia ...

  10. 一个MongoDB索引走偏的案例及探究分析

    接业务需求,有一个MongoDB的简单查询,太耗时了,执行了 70S 左右,严重影响用户的体验.. 查询代码主要如下: db.duoduologmodel.find({"Tags.SN&qu ...