昨天晚上 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 升级之路又遇新障碍。

相关博文:

做梦也没有想到:Windows 上的 .NET Core 表现更糟糕的更多相关文章

  1. 如何让 Windows 上的命令行工具更好用

    侯爵老师视频详解:如何让 Windows 上的命令行工具更好用 很多 Windows 用户在打开这个小黑窗时,都会情不自禁的感慨,「实在是太丑了--」 实际上如果你用的是 Windows 8 或 Wi ...

  2. ubuntu上部署windows开发的dotnet core程序

    目标:完成windows上开发的dotnet core程序部署至linux服务器上(Ubuntu 14.04) windows上开发dotnet core很简单,安装好VS2017,建立相关类型的项目 ...

  3. 在Windows系统搭建.NET Core环境并创建运行ASP.NET网站

    微软于6月27日在红帽DevNation峰会上 正式发布了.NET Core 1.0.ASP.NET 1.0和Entity Framework Core 1.0,其将全部支持Windows.OS X和 ...

  4. 写一个Windows上的守护进程(5)文件系统重定向

    写一个Windows上的守护进程(5)文件系统重定向 在Windows上经常操作文件或注册表的同学可能知道,有"文件系统/注册表重定向"这么一回事.大致来说就是32位程序在64位的 ...

  5. 写一个Windows上的守护进程(3)句柄的管理

    写一个Windows上的守护进程(3)句柄的管理 在Windows中编程,跟HANDLE打交道是家常便饭.为了防止忘记CloseHandle,我都是使用do-while-false手法: void f ...

  6. 写一个Windows上的守护进程(2)单例

    写一个Windows上的守护进程(2)单例 上一篇的日志类的实现里有个这: class Singleton<CLoggerImpl> 看名字便知其意--单例.这是一个单例模板类. 一个进程 ...

  7. Windows 上的 SSH?使用 PowerShell Remoting 远程管理 Windows 服务器

    作者:陈计节 个人博客:https://blog.jijiechen.com/post/powershell-remoting/ 在 Linux/Unix 世界里 SSH 是个好东西,SSH 是 Se ...

  8. Linux和Windows上实现的异同-Linux的自适应ACK

    上周有同事问,延迟ACK到底对应用层会产生什么后果,我也不知道该如何作答,于是丢了一个链接: TCP之Delay ACK在Linux和Windows上实现的异同-Linux的自适应ACK: 是的,这是 ...

  9. 【194】Windows 上使用 wget

    本文包括两部分,首先就是在 Windows 使用 wget 来下载文件,这样固然很好,然而问题并非这么简单,在 PowerShell 4.0 版本中增加了 Invoke-WebRequest 的别名 ...

  10. Windows 上安装 Jekyll.

    Jekyll是一个静态网站生成工具.它允许用户使用HTML.Markdown或Textile来建立静态页面,然后通过模板引擎Liquid(Liquid Templating Engine)来运行. 原 ...

随机推荐

  1. MYSQL基础操作之数据约束与关联查询

    一.MYSQL约束 1.默认值约束,当字段没有插入值的时候,mysql自动给该字段分配默认值. 默认值的字段允许为空. 对默认值字段也可以插入null. CREATE TABLE STUDENT( I ...

  2. 使用File类列出指定位置下的文件及目录信息

    public static void main(String [] args) { File f=new File("C:"); File [] fl=f.listFiles(); ...

  3. 关于InvokeRequired与Invoke

    from:http://www.th7.cn/Program/net/201306/140033.shtml Windows 窗体中的控件被绑定到特定的线程,不具备线程安全性.因此,如果从另一个线程调 ...

  4. AndroidManifest.xml相关知识

    AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest  ...

  5. [转]人人网首页拖拽上传详解(HTML5 Drag&amp;Drop、FileReader API、formdata)

    人人网首页拖拽上传详解(HTML5 Drag&Drop.FileReader API.formdata) 2011年12月11日 | 彬Go 上一篇:给力的 Google HTML5 训练营( ...

  6. [C语言 - 14] 进制

    进制 二进制 int number = 0B1010; 没有二进制的输出格式   八进制     int number2 = 07613;     printf("number2 = %o\ ...

  7. java: cannot execute binary file

    转自:http://jxwpx.blog.51cto.com/15242/222572 java: cannot execute binary file 如果遇到这个错,一般是操作系统位数出问题了. ...

  8. 漫画研发之十二:该听谁的? 部门经理 or 项目经理

                       

  9. MySQL开发——【数据库、数据表的基本操作】

    启动MySQL服务器端 CMD启动MySQL服务器端 net start(启动)|stop(停止)|restart(重启)服务名称(mysql) 连接MySQL服务器端 CMD连接MySQL服务器端 ...

  10. IP基本原理

    IP基本原理 一.IP基本原理 IP是网络层协议,也是当今应用最广泛的网络协议之一 IP协议规定了数据的封装方式,网络节点的标识方法,用于网络上数据的端到端的传递. 1.IP及其相关协议 2.IP的主 ...