Azure服务在几天后死亡

Azure服务在几天后死亡,azure,memory-leaks,virtual,Azure,Memory Leaks,Virtual,我有一个小型(x2)云服务运行,运行了4-6天,但随后它变得无响应,需要通过Azure portal手动重新启动才能恢复在线 Windows事件日志显示虚拟内存不足。2-3天后,我开始得到: Windows成功诊断出虚拟内存不足的情况。这个 以下程序消耗的虚拟内存最多:WaIISHost.exe (3836)消耗了3810709504字节,CacheService.exe(1528)消耗了 823902208字节,w3wp.exe(1728)消耗了145485824字节 一段时间后,服务开始失败

我有一个小型(x2)云服务运行,运行了4-6天,但随后它变得无响应,需要通过Azure portal手动重新启动才能恢复在线

Windows事件日志显示虚拟内存不足。2-3天后,我开始得到:

Windows成功诊断出虚拟内存不足的情况。这个 以下程序消耗的虚拟内存最多:WaIISHost.exe (3836)消耗了3810709504字节,CacheService.exe(1528)消耗了 823902208字节,w3wp.exe(1728)消耗了145485824字节

一段时间后,服务开始失败(由于内存问题??):

应用程序:CacheService.exe框架版本:v4.0.30319
描述:由于未处理的错误,进程已终止 例外。例外信息: Microsoft.ApplicationServer.Caching.ConfigStoreException
堆栈:在 Microsoft.ApplicationServer.Caching.CustomProviderProxy+c_DisplayClass5.b_3(System.Object)
在 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback,System.Object,布尔值)位于 System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
位于System.Threading.ThreadPoolWorkQueue.Dispatch()的 System.Threading.ThreadPoolWaitCallback.PerformWaitCallback()
|http://schemas.microsoft.com/win/2004/08/events/event'>1026200x80000000001138应用程序RD00155D45A2A应用程序: CacheService.exe框架版本:v4.0.30319说明: 由于未处理的异常,进程已终止。
例外信息: Microsoft.ApplicationServer.Caching.ConfigStoreException
堆栈:在 Microsoft.ApplicationServer.Caching.CustomProviderProxy+c_DisplayClass5.b_uu3(System.Object)
在 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback,System.Object,布尔值)位于 System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
位于System.Threading.ThreadPoolWorkQueue.Dispatch()的 System.Threading.\u ThreadPoolWaitCallback.PerformWaitCallback()

最终Http请求开始失败:

流程信息:
进程ID:3344
进程名称:w3wp.exe
帐户名称:NT授权\网络服务
异常信息:
异常类型:HttpException
异常消息:分页文件太小,无法完成此操作。(来自HRESULT的异常:0x800705AF)位于 System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()
在System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()上 位于System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager,IApplicationHost appHost,IConfigMapPathFactory configMapPathFactory,HostingEnvironmentParameters hostingParameters, PolicyLevel PolicyLevel,异常appDomainCreationException)
分页文件太小,无法完成此操作。 (来自HRESULT的异常:0x800705AF)

我不确定问题是虚拟内存配置过低,还是内存使用过高。WaIISHost.exe虚拟内存使用率看起来确实很高,但似乎稳定在4.1 GB左右

我不知道为什么WaIISHost.exe会需要这么多,因为Run()方法只执行非常简单的内务管理活动,例如每隔几分钟ping一次站点,以使应用程序在白天运行

Azure Portal中的可用内存监控显示,在崩溃之前的整个时间段内,该服务有300-800MB的可用内存


你知道有什么问题吗?如何将虚拟内存配置得更高?

根据我的经验,您的应用程序代码中存在内存泄漏,Azure异常中捕捉到的只是您的环境内存不足的后遗症,因为应用程序代码消耗了所有内存

通常情况下,当我将RDP放入框中时,识别内存泄漏的进程,然后使用Redgate工具(或任何其他工具)启动代码的分析会话。然后使用该工具运行半天的流程,您应该很容易确定问题所在

您可能会发现,我猜这类似于导致代码无法正确清理的异常。这就解释了为什么在几天和几次例外之后,您会看到这个问题。我将查看您的异常处理和清理代码。您应该测试代码库中的断开连接和其他可能影响代码的瞬态位置


我也会坚持使用newrelic或foglight之类的工具,这样您就可以清楚地知道您的代码/Azure实例即将失败。您还可以查看失败的时间尺度,并可能获得更多日志信息,以及是否有任何问题导致您遇到

根据我的经验,你的应用程序代码中存在内存泄漏,Azure异常中捕捉到的只是你的环境内存不足的后遗症,因为应用程序代码消耗了所有内存

通常情况下,当我将RDP放入框中时,识别内存泄漏的进程,然后使用Redgate工具(或任何其他工具)启动代码的分析会话。然后使用该工具运行半天的流程,您应该很容易确定问题所在

您可能会发现,我猜这类似于导致代码无法正确清理的异常。这就解释了为什么在几天和几次例外之后,您会看到这个问题。我将查看您的异常处理和清理代码。您应该测试是否存在断开连接