做梦也没有想到:Windows 上的 .NET Core 表现更糟糕
昨天晚上 18:15 左右我们发布了跑在 Windows 上 .NET Core 博客系统,本想与 .NET Framework 版进行同“窗”的较量,结果刚发布上线就发现 CPU 占用异常高,发布不到1小时就下线了,根本不是一个级别的较量,或者说 .NET Core 连较量的资格都没有,刚上台就趴下了。
如果与 Linux 上的 .NET Core 博客系统(docker swarm 与 docker-compose 部署方式)相比,也是不是一个级别的较量,部署在 Linux 上时是访问高峰撑不住,而部署在 Windows 上连访问低峰都撑不住。
在昨天发布失败后,我们怀疑 CPU 异常高可能是因为 memcached 客户端 EnyimMemcachedCore 使用异步方法时的并发性能问题,于是我们把异步改为同步。
今天我们在验证是否是 EnyimMemcachedCore 的并发性能问题时,我们采用了新的方法,接入部分流量,让单台服务器的 QPS 达到一定值,结果发现了另外一个做梦也没有想到的问题。
在 QPS 不高时,跑在 Windows 上的 .NET Core 博客站点表现非常出色,响应速度飞快;但是当 QPS 高于一定值(我们测试时接入的流量让 QPS 在 300-500 左右),.NET Core 博客站点像变了个人似的,大量请求响应速度变慢,而且随着时间推移越来越慢(一种泄漏现象),先是很多请求响应时间5秒左右(我们是从5秒开始监控的),然后是10秒左右,然后是15秒左右。。。然后日志中出现大量下面的错误
2019-08-14 13:13:16.290 [Error] Failed executing DbCommand ("30,022"ms)
System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
---> System.ComponentModel.Win32Exception (258): The wait operation timed out.
at System.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__126_0(Task`1 result)
at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
EF Core 执行的很多 SQL 查询超时(超过30秒),而 EF Core 生成的这些 SQL 语句没有问题,我们都 review 过。
查看数据库服务库的监控,让人大吃一惊,就这点 QPS ,仅仅因为 .NET Core 在 Windows 上跑竟然造成数据库服务器 CPU 100% 。
而只要将 .NET Core 博客站点一下线,数据库服务器 CPU 就立马恢复正常,问题非常奇怪。
今天微软也发布了 .NET Core 3.0 Preview 8,我们将 System.Data.SqlClient 升级到 4.7.0-preview8.19405.3 也是同样的问题。
我们的数据库服务器用的是阿里云 RDS SQL Server 2008 R2 ,EF Core 用的是 3.0.0-preview5.19227.1 ,由于 EF Core 3.0 从 Preview 6 开始不支持 UseRowNumberForPaging ,所以暂时无法升级到 EF Core 3.0 Preview 8 ,不知道最新版的 EF Core 是否也有这个问题,但我们怀疑应该是 System.Data.SqlClient 的问题,至少是 System.Data.SqlClient 对 Windows 的支持问题,或者是对 SQL Server 2008 R2 的支持问题。
.NET Core 升级之路又遇新障碍。
接下来,我们会进一步排查这 2 个 CPU 高的问题(web服务器与数据库服务器)。
EF Core 与 SqlClient 相关问题链接:
Powered by .NET Core 系列博文:
- 【故障公告】发布 .NET Core 版博客站点引起大量 500 错误
- 【网站公告】.NET Core 版博客站点第二次发布尝试
- 暴风雨中的 online : .NET Core 版博客站点遭遇的高并发问题进展
- Powered by .NET Core 进展:验证高并发性能问题嫌疑犯 docker swarm
- 同“窗”的较量:部署在 Windows 上的 .NET Core 版博客站点发布上线
做梦也没有想到:Windows 上的 .NET Core 表现更糟糕的更多相关文章
- 峰回路转:去掉 DbContextPool 后 Windows 上的 .NET Core 版博客表现出色
今天早上,我们修改了博客程序中的1行代码,将 services.AddDbContextPool 改为 services.AddDbContext ,去掉 DbContextPool . 然后奇迹出现 ...
- 如何让 Windows 上的命令行工具更好用
侯爵老师视频详解:如何让 Windows 上的命令行工具更好用 很多 Windows 用户在打开这个小黑窗时,都会情不自禁的感慨,「实在是太丑了--」 实际上如果你用的是 Windows 8 或 Wi ...
- 同“窗”的较量:部署在 Windows 上的 .NET Core 版博客站点发布上线
为了验证 docker swarm 在高并发下的性能问题,周一我们发布了使用 docker-compose 部署的 .net core 版博客站点(博文链接),但由于有1行代码请求后端 web api ...
- .NET平台系列26:在 Windows 上安装 .NET Core/.NET5/.NET6
系列目录 [已更新最新开发文章,点击查看详细] 本文介绍如何在 Windows 上安装 .NET. .NET 由运行时和 SDK 组成. 运行时用于运行 .NET 应用,应用可能包含也可能不包 ...
- ubuntu上部署windows开发的dotnet core程序
目标:完成windows上开发的dotnet core程序部署至linux服务器上(Ubuntu 14.04) windows上开发dotnet core很简单,安装好VS2017,建立相关类型的项目 ...
- 在Windows系统搭建.NET Core环境并创建运行ASP.NET网站
微软于6月27日在红帽DevNation峰会上 正式发布了.NET Core 1.0.ASP.NET 1.0和Entity Framework Core 1.0,其将全部支持Windows.OS X和 ...
- 写一个Windows上的守护进程(5)文件系统重定向
写一个Windows上的守护进程(5)文件系统重定向 在Windows上经常操作文件或注册表的同学可能知道,有"文件系统/注册表重定向"这么一回事.大致来说就是32位程序在64位的 ...
- 写一个Windows上的守护进程(3)句柄的管理
写一个Windows上的守护进程(3)句柄的管理 在Windows中编程,跟HANDLE打交道是家常便饭.为了防止忘记CloseHandle,我都是使用do-while-false手法: void f ...
- 写一个Windows上的守护进程(2)单例
写一个Windows上的守护进程(2)单例 上一篇的日志类的实现里有个这: class Singleton<CLoggerImpl> 看名字便知其意--单例.这是一个单例模板类. 一个进程 ...
随机推荐
- python进阶--字典排序
zip()函数 sorted() 要求对字典中,按值的大小排序 解决方案: 利用zip函数 zip函数介绍: zip函数可以将可迭代对象打包成一个个元组,在python3中返回一个对象,在python ...
- ~~函数基础(三):嵌套函数&匿名函数~~
进击のpython 嵌套函数&匿名函数 讲完作用域之后 对变量的作用范围有大致的了解了吗? 讲个稍微小进阶的东西吧 能够帮助你更加的理解全局和局部变量 嵌套函数 玩过俄罗斯套娃不? 没玩过听过 ...
- Socket网络编程系列教程序
C语言的用途相当多,可以用在数据结构.数据库.网络.嵌入式等方面,历经40多年不衰,真是厉害!最近一直想从某一应用方面写一个系列教程,好好地把某一方面讲深讲透. 正好博主对网络方面的编 ...
- 0x31 prime distance(质数)
题目描述: 给定两个整数L和U,你需要在闭区间[L,U]内找到距离最接近的两个相邻质数C1和C2(即C2-C1是最小的),如果存在相同距离的其他相邻质数对,则输出第一对. 同时,你还需要找到距离最远的 ...
- TF项目实战(SSD目标检测)-VOC2007
TF项目实战(SSD目标检测)-VOC2007 训练好的模型和代码会公布在网上: 步骤: 1.代码地址:https://github.com/balancap/SSD-Tensorflow 2.解压s ...
- Kafka集群部署以及使用
Kafka集群部署 部署步骤 hadoop102 hadoop103 hadoop104 zk zk zk kafka kafka kafka http://kafka.apache.org/down ...
- [leetcode] 486. Predict the Winner (medium)
原题 思路: 解法一: 转换比较拿取分数多少的思路,改为考虑 player拿的分数为正,把Player2拿的视为负,加上所有分数,如果最后结果大于0则Player1赢. 思考得出递归表达式: max( ...
- lambda匿名函数,sorted(),filter(),map(),递归函数
1.lambda匿名函数 为了解决一些简单的需求而设计的一句话函数 #计算n的n次方 def func(n): return n**n print(func(10)) f = lambda n: n* ...
- 在WebApi项目里使用MiniProfiler并且分析 Entity Framework Core
在WebApi项目里使用MiniProfiler并且分析 Entity Framework Core 一.安装配置MiniProfiler 在现有的ASP.NET Core MVC WebApi 项目 ...
- JUint4的下载、配置及对一个算法编写单元测试用例(测试多组数据每组多个参数)
一.JUnit4 jar包下载 链接:https://pan.baidu.com/s/1AdeVGGikcY5dfL151ZnWHA 提取码:h1am 下载完成后,解压一下即可. 二.导入JUnit4 ...