Странная прерывистая ошибка соединения SQL, исправления при перезагрузке, возвращаются через 3-5 дней (ASP.NET) - PullRequest
3 голосов
/ 09 января 2009

По какой-то причине каждые 3-5 дней наше веб-приложение теряет возможность открывать соединение с БД со следующей ошибкой, странно то, что все, что нам нужно сделать, это перезагрузить контейнер (это VPS) и это восстановлено к нормальной функциональности. Затем, через несколько дней или около того, это случается снова. У кого-нибудь когда-нибудь была такая проблема? Я заметил много АНОНИМНЫХ ЛОГОНОВ в журнале безопасности посреди ночи с нашего сервера AD, что странно, а также с IP-адреса в Амстердаме. Я не уверен, как сказать, что именно они означают, или это связано или нет.

Server Error in '/ntsb' Application.
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

Source Error:

Line 11:        
Line 12:        
Line 13:        dbConnection.Open()
Line 14:        
Line 15:        


Source File: C:\Inetpub\wwwroot\includes\connection.ascx    Line: 13

Stack Trace:

[SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)]
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +248
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +245
   System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject) +475
   System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) +260
   System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) +2445449
   System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) +2445144
   System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) +354
   System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) +703
   System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) +54
   System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) +2414696
   System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) +92
   System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +1657
   System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +84
   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +1645687
   System.Data.SqlClient.SqlConnection.Open() +258
   ASP.includes_connection_ascx.getConnection() in C:\Inetpub\wwwroot\includes\connection.ascx:13
   ASP.default_aspx.Page_Load(Object sender, EventArgs e) in C:\Inetpub\wwwroot\Default.aspx:16
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +42
   System.Web.UI.Control.OnLoad(EventArgs e) +132
   System.Web.UI.Control.LoadRecursive() +66
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428


Version Information: Microsoft .NET Framework Version:2.0.50727.3053; ASP.NET Version:2.0.50727.3053 

Ответы [ 4 ]

2 голосов
/ 09 января 2009

Количество разрешенных подключений к серверу sql является фиксированным ресурсом. Похоже, у вас где-то есть код, который неправильно закрывает соединение, и через некоторое время вы не можете открыть больше новых.

1 голос
/ 19 июля 2011

Недавно мы столкнулись с подобной проблемой в нашей производственной среде, и после многих циклов «отладки», анализа и анализа дампов, мы пришли к выводу, что причиной этого является в значительной степени фрагментированная куча больших объектов. Ссылка http://msdn.microsoft.com/en-us/magazine/cc534993.aspx. Короче говоря, вашему приложению не хватило памяти и не хватило свободного пространства для открытия соединений. Вы можете использовать VMMap http://technet.microsoft.com/en-us/sysinternals/dd535533 с целью определения доступного свободного места. Регулярно ли вы перерабатываете свои AppPools? AppPool recycle разрушает приложение и освобождает любую память справки, следовательно, решает любые связанные с этим проблемы.

0 голосов
/ 09 января 2009

"Я заметил много АНОНИМНЫХ ЛОГОНОВ в журнале безопасности посреди ночи с нашего сервера AD, что странно, а также с IP-адреса в Амстердаме."

Звучит так, как будто у вас может быть кто-то, пытающийся проникнуть в вашу систему, и, возможно, это соединения, которые не закрываются. Мне нравится предложение использовать perfmon и profiler, чтобы увидеть проблему.

0 голосов
/ 09 января 2009

Вы пытались собрать основную информацию с помощью perfmon и profiler (trace), чтобы узнать, сколько соединений установлено, статистика памяти и другие интересные вещи?

...