大家好!
最近阿里云ECS出现了一些奇怪的问题,在并发量大的时候,ASP.NET会抛出下面的异常:
System.Data.SqlClient.SqlException: 已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时。) ---> System.ComponentModel.Win32Exception: 等待的操作过时。
--- 内部异常堆栈跟踪的结尾 ---
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource
在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 retry, DbConnectionOptions userOptions)
1 retry)
在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource
在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
在 System.Data.SqlClient.SqlConnection.Open()
在 Microsoft.Practices.EnterpriseLibrary.Data.Database.OpenConnection()
在 Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteNonQuery(DbCommand command)
这类异常一般会在1分钟以内自动恢复。
一开始怀疑是阿里云RDS的问题,但是监控到RDS的连接数,IOPS以及CPU都是正常的,而且其他负载量低的ECS连接RDS也是没有问题的。
参考网上的一些回复检查了 netsh WinSock Show Catalog,没有发现异常。
现在怀疑是不是ECS的原因或者ASP.NET方面的问题。
Ray Wu的主页
因为异常只有超时信息,可以联系阿里云技术支持,让他们从rds那边查看具体超时原因。这样可以跟你自己程序结合分析