Strano errore di connessione SQL intermittente, correzioni al riavvio, ritorna dopo 3-5 giorni (ASP.NET)

StackOverflow https://stackoverflow.com/questions/428846

Domanda

Per qualche motivo ogni 3-5 giorni la nostra app web perde la possibilità di aprire una connessione al db con il seguente errore, la cosa strana è che tutto ciò che dobbiamo fare è riavviare il contenitore (è un VPS) e viene ripristinato alla normale funzionalità. Poi qualche giorno dopo o così succede di nuovo. Qualcuno ha mai avuto un simile problema? Ho notato un sacco di ANONIMI LOGON nel registro di sicurezza nel bel mezzo della notte dal nostro server AD, il che è strano, e anche alcuni da un IP di Amsterdam. Non sono sicuro di come dire esattamente cosa significhino o se sia correlato o meno.

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 
È stato utile?

Soluzione

Il numero di connessioni consentite al server sql è una risorsa fissa. Sembra che tu abbia del codice da qualche parte che non sta chiudendo correttamente la sua connessione e dopo un periodo non puoi più aprirne di nuovi.

Altri suggerimenti

Di recente abbiamo affrontato un problema simile nel nostro ambiente di produzione e dopo molti cicli di "debugdiag" e analisi dei dump siamo giunti alla conclusione che un grande mucchio di oggetti in gran parte frammentato lo stava causando. Rif. http://msdn.microsoft.com/en-us/magazine/cc534993. aspx . In breve, l'applicazione potrebbe aver esaurito la memoria e non disponesse di spazio sufficiente per aprire le connessioni. Puoi utilizzare VMMap http://technet.microsoft.com/en-us/sysinternals/dd535533 allo scopo di identificare lo spazio libero disponibile. Ricicli i tuoi AppPool regolarmente? AppPool recycle abbatte l'applicazione e libera quindi tutta la memoria di aiuto, risolvendo eventuali problemi correlati.

Hai provato a raccogliere informazioni di base con perfmon e profiler (trace) per vedere quante connessioni sono state fatte, statistiche di memoria e altre cose interessanti?

" Ho notato un sacco di ANONIMI LOGON nel registro di sicurezza nel bel mezzo della notte dal nostro server AD, il che è strano, e anche alcuni da un IP di Amsterdam. & Quot;

Sembra che tu possa avere qualcuno che cerca di entrare nel tuo sistema e forse queste sono le connessioni che non si stanno chiudendo. Mi piace il suggerimento di usare perfmon e profiler per vedere il problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top