我有我的主机有几乎零流量的网站的服务器。
有几个人(<20),每天进入该网站,以及一些RSS阅读器订阅我们提出了一些饲料。
几乎每天晚上,一个RSS阅读器将达到我们在半夜,并得到一个例外,该网站无法连接到SQL Server,因为在连接超时。 细节是非常奇怪的,所以我在寻找的可能是什么问题一些帮助,因为我不知道从哪里开始寻找了。
我们使用ASP.Net MVC,实体框架,和SQL Server 2008在Windows Server 2008的本机是一种专用的盒子,我们从一个不完全的顶级供应商获得,这样的事情可能配置不很理想,或者谁知道其他。
这个盒子也非常小,并且只有1GB内存,但它应该采取的那种,我们有负荷的现在...
我复制了充分调用堆栈下面,但首先,一些我们知道的事情:
- 错误时,iTunes是查询我们的网站总是会发生的。 我相信这应该有无关什么,但事实是,我们只从iTunes得到它。 我最好的猜测是,这是因为只有在iTunes中时,没有人被击中我们夜间的那个时候我们查询。
- 我们的一个理论是,SQL Server和IIS正在争取的内存,其中一人是越来越分页到磁盘出不使用时,当有人“唤醒它”,它读取一切从磁盘恢复时间太长到内存中。 这是有可能发生的潜在? (我是那种抛弃这一点,因为它听起来像一个设计问题在SQL Server如果有可能)
- 我也想过,我们正在泄漏的连接,因为我们可能无法适当地配置EF实体(可能在这里看到我的问题 )。 这是我可以通过谷歌搜索的问题找到的唯一的事情。 我放弃这给我们有非常低的负荷。
- 这总是发生在夜间,所以它的相关的事实都没有发生了,而很可能的东西。 例如,我敢肯定的是,当这些请求命中,Web服务器进程得到了回收,它的启动/重新JITting一切。 重新JITting不解释SQL超时,虽然。
更新:我们连接探查的建议,并花了相当长一段时间,我们有一个新的异常之前。 这是我们所知道的新东西:
- 具有极大连接探查减小的,我们得到了错误的数量。 事实上,在获得正常每天几个,我们不得不等待3或4天,这一次发生。 一旦我们停止剖析,这又回到了正常的错误频率(或更糟)。 因此,剖析了隐藏这个问题在一定程度上,但并不完全一定的影响。
- 纵观探查器跟踪旁边的请求日志IIS,有请求和查询之间的预期的一一对应关系。 然而,每一个现在,然后,我看到正在执行的查询很多不具有correllation与IIS日志的。 事实上,被记录的实际错误权利之前,我在一段3分钟 ,所有这些都是完全无关的IIS日志得到了750个查询 。 查询文本看看什么样的不可读的废话是EF产生,他们并不都是一样的,他们都看起来就像从网站来查询:相同的应用程序名称,用户等方面给予的想法有多可笑这个是,该网站得到了打DB约370 IIS的要求,在2天的过程
- 这些无法解释的疑问并非来自同一ClientProcessID与以前那些网站,虽然他们可能仍然有来自网站,如果该进程得到了在此期间回收。 有上一次的无活动将近一个小时解释查询,第一个原因不明。
- 其中一个长的查询扫尾我不知道他们来自哪里传来的权利我被记录的错误之前,所以我相信这是我们应该遵循的线索。
- 如我所料最初,当被执行抛出错误的查询,它来自一个不同的ClientProcessID比前一个,(8分钟后比前不明原因之一,而且几乎整整一个小时比以前IIS一个更高版本)。 这意味着,对我来说,工作进程确实得到了循环利用。
- 这事我绝对不明白。 在IIS日志显示错误的请求前一分钟,4人担任完美,但对于那些查询不跟踪显示在所有。 事实上,在这4个是顺利,我有4个例外接二连三抛出,那些4还没有在跟踪中显示出来(这是有道理的,因为如果在连接超时的查询应该从来没有得到执行,但我没有看到连接在跟踪尝试要么)
因此,简而言之,我完全一无所知这一点。 我无法找到那些几百个查询,它们会在快速连续运行的原因,但我相信那一定有事情做的问题。
我也不知道如何诊断连接问题...
要不怎么事件探查器跟踪可能会丢失一些查询,根据IIS经过精细去...
有任何想法吗?
这是异常信息:
System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
System.Data.EntityException: The underlying provider failed on Open. ---> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
--- End of inner exception stack trace ---
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
at System.Data.EntityClient.EntityConnection.Open()
at System.Data.Objects.ObjectContext.EnsureConnection()
at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
at System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__1[TResult](IEnumerable`1 sequence)
at System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)
at System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression expression)
at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)
at MyProject.Controllers.SitesController.Feed(Int32 id) in C:\...\Controller.cs:line 38
at lambda_method(ExecutionScope , ControllerBase , Object[] )
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
at System.Web.Mvc.Controller.ExecuteCore()
at System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
任何想法将极大的赞赏。