.NET Core 迁移躺坑记续集--Win下莫名其妙的超时
继上一集.NET Core 迁移躺坑记里说到遇到的各种问题并且弄了n个解决方案之后,特别是对于问题4的解决方案对于切换了HttpClientFactory
我用了你家netcore 2.1下专门解决之前HttpClient口病已久的灵丹妙药了,信心满满的上线…..然后挂了,该超时的继续超,
其中这个问题比较诡异在于超时的主要集中在两台机器上(俗称两兄弟了)
由于不明真相到底是什么导致的,而且接下来又要到五一了,为了欢度五一这么一个伟大艰巨的任务,为了证明迁移core的伟大光荣正确,怎么也要解决掉这个问题
步骤一,先确认问题的复现
首先直接放弃在任何测试环境复现的想法,因为之前在测试HttpClientFactory的时候已经在测试环境里进行过多批次各种场景的压测,无论是长时低压,长时高压,短时高压都进行过都没发生过
而且就算是线上也就2台机器有问题
所以让运维提供ip,指向到这台服务器后,使用superbenchmarker对其进行压测
压测中发现这个….很稳定
稳定5分钟,挂个2分钟
绿色线为RPS每秒请求数,紫色是请求响应时间,发现绿色线稳定5分钟后,会突然没有了(请求卡住了),等个2分钟后突然紫色线突然冒个刺(等待已久的请求终于响应了)然后绿色线又起来了(请求恢复正常)
步骤二,确认超时的时候发生了什么
第二天,开好压测,因为确认了每5分钟后会超时2分钟这个时间,等着个四分钟左右跑到运维那坐着,看下超时期间到底发生了什么。
然后我就绝望了。
常规的比如CPU/内存之类一切正常,考虑到HttpClient有过的历史缺陷比如 .NET HttpClient 的缺陷和文档错误让开发人员倍感沮丧 也特意关注过端口号之类的,也一切正常。
步骤三,迁移前的Framework怎么没有问题,是Core的锅吗
为了证明这个事情,准备了2个console
一个Framework下使用静态的HttpClient每100ms调用某外部接口
一个Core下使用HttpClientFactory也是每100ms调用某外部接口
这个结果让我绝望的平方
结果显示Framework下一切正常,只有Core有问题
后续在补充了几个不同姿势的Core版本的console来测试
包括
1.将SetHandlerLifetime设置为InfiniteTimeSpan
2.不用HttpClientFactory直接new一个静态HttpClient(和Framework一摸一样的姿势)
依然都会又超时的问题
由于网上google翻了个遍没找到类似的说法
此时的内心想法:难道我要开历史的倒车了么(难道只有我有问题么?还是说我哪里姿势有问题?别人怎么都好好的?难道别人都是假的?网上吹的那么厉害全都是瞎BB?….各种草泥马奔腾而过)
柳暗花明,绝望的时候找下组织吧
然后就在某微信群里发出求救信号
最后得到一个看起来有点靠谱的方案
(截图里的内容,)
文字版描述:创建HttpClient的时候设置UseProxy为false,此值默认值是true
然后使用这个改造后在打包一个console进行测试,这次结果终于看到了希望的曙光了
由于根据之前的规律每5分钟之后会挂2分钟,能活个10分钟基本证明修改有效
跟着这个将站点都修改了UseProxy=false打包上去,进行压测
跑了好几个小时,目前为止并没有发生再超时的问题了,现在基本实锤问题解决了
最后总结
无论你是new一个静态HttpClient还是通过HttpClientFactory去创建HttpClient,记得要将UseProxy=false(当然,除非你要用proxy那就没辙)
当然,最后有几个疑点我也不是太清楚
比如
为什么线上就2台机器恒定有问题?
而其他机器则比较稳定(实际线上服务器接近30台)?
为什么是稳5分钟后超时2分钟(这个5和这个2是哪里设置的)?
UseProxy在这里又是起到了什么样的作用?
群里小伙伴给了这么一个解释
然而我依然不是太理解T-T
.Net世界真是博大精深…
原文地址:https://www.cnblogs.com/leolaw/p/10776451.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
.NET Core 迁移躺坑记续集--Win下莫名其妙的超时相关推荐
- .NET Core 迁移躺坑记
最近将自己负责的一个核心接口系统从.Net Framework迁移到了.Net Core. 整体过程,从业务层面说一般般吧(整体还好但还是搞的业务有感,没出严重故障)但是技术层面上感觉其实并没有达到要 ...
- centos7恢复mysql数据库_MySQL数据库升级迁移填坑记
原库:*.*.101.73/74 系统环境: Suse 12.4 MySQL: 5.7.29 新库:*.*.110.46/47 系统环境:CentOS7.7 64位 MySQL版本: 5.7.30 [ ...
- .NET CORE迁移踩坑
https://www.cnblogs.com/leolaw/p/10740678.html 转载于:https://www.cnblogs.com/chinadeveloper/p/10750937 ...
- 小小甜菜Movidius爬坑记
小小甜菜Movidius爬坑记 我是在神经计算棒+树莓派3B上看到实际效果后决定使用本方案的,实际项目中使用树莓派CM3作为核心板卡,使用Movidius 2或Movidius X(具体版本看项目需求 ...
- 【小程序迁移】微信小程序迁移到支付宝记坑
[小程序迁移]微信小程序迁移到支付宝记坑 文档控制台网址汇总 前言 本地区别 仅企业可用的功能 限制功能 插件区别 云开发API区别 需要做的代码变更 xml部分 CSS部分 JS部分 自定义组件 比 ...
- 服务器重新部署踩坑记
服务器重新部署踩坑记 Intro 之前的服务器是 Ubuntu 18.04 ,上周周末想升级一下服务器系统,从 18.04 升级到 20.04,结果升级升挂了... 后来 SSH 始终连不上,索性删除 ...
- windows container 踩坑记
windows container 踩坑记 Intro 我们有一些服务是 dotnet framework 的,不能直接跑在 docker linux container 下面,最近一直在折腾把它部署 ...
- Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记
前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...
- 7代cpu能装虚拟xp系统吗_Intel 10代PC/笔记本安装Win7踩坑记 amp; 驱动分享
免责声明:本文只是从技术角度进行讨论,主要因我自己的兴趣而引发测试.只代表个人观点,与任何组织机构无关. 目录 - 从赛扬G5900"亮机"CPU说起 - 10代Core Wi ...
最新文章
- c++中求字符串数组的min/max
- html select 多选取值,下拉框多选实现 jquery-multiselect 并获取选中的值
- pymysql.err.InterfaceError: (0, '')
- 无法访问‘/dev/ttyUSB: usb 基站,即显示端口被占用
- 【Java】总结//TODO、//FIXME、//XXX 注释
- 炒股一年,本金18万已亏损10万,还要不要继续?
- qtextedit非编辑时去边框_10分钟看懂Photoshop图像的基本编辑方法-数字化图像、图像基础理论知识(置入文件)...
- 数百亿的新疆安防市场,集成巨头告诉你如何才能从中分杯羹
- 在Android开发中如何移除EditText上的输入焦点
- 自定义IE地址栏图标
- 全球酷站中心 html5网站,除了Behance,还有哪些优质设计资源站
- Ubuntu18.04 下载的cuda10.1与未安装完全的nvidia-cuda-dev_9.1发生冲突,卸载
- 安卓AndroidStudio设计计算器实现简单的计算
- 利用双目摄像头来进行空间点的三维坐标定位
- 精挑细选的良心APP,每款都非常惊艳
- Python教程一:Python环境安装(Anaconda3版本)
- 一年赚上亿的生意_甩过梅艳芳,做生意一年赚几亿,他竟然火了快四十年
- TopCoat前端框架
- 数据库关系代数运算之连接
- python爬虫(爬取图片)
热门文章
- 内存泄露 体现在哪个数字上_Microsoft刚刚泄漏了一个新的开始菜单。 你喜欢哪个?...
- word中 有注释标签吗_如何在Word中注释图像
- 使用bcftools提取指定样本的vcf文件(extract specified samples in vcf format)
- Yet another nio framework for java
- Oracle执行计划详解
- 关于jquery ajax发送以及php接受json数据的一点记录
- JavaScript对SEO的影响及解决之道
- Android Ap 开发 设计模式第七篇:生成器模式
- .NET应用程序中异步调用Web Service的几种方法 come from: veryhappy(wx.net)
- 聊一聊基于Nacos的metadata完成服务间的AB测试