Azure服务在几天后就会消失

0 virtual memory-leaks azure

我有小型(x2)云服务运行和运行4-6天,但它变得没有响应,需要通过Azure门户手动重启才能使其重新联机.

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

Windows成功诊断出虚拟内存不足的情况.下列程序消耗的大多数虚拟存储器:WaIISHost.exe(3836)所消耗3810709504个字节,CacheService.exe(1528)所消耗823902208个字节,程序w3wp.exe(1728)所消耗145485824个字节.

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

应用程序:CacheService.exe Framework版本: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'> 1026200x800000000000001138ApplicationRD00155D45A2ADApplication:CacheService.exe Framework版本:v4.0.30319说明:该过程由于未处理的异常终止.
例外信息:Microsoft.ApplicationServer.Caching.ConfigStoreException
堆栈:在Microsoft.ApplicationServer.Caching.CustomProviderProxy + <>Ç
._DisplayClass5 <PerformOperation> b__3(System.Object的)
在System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext,系统.Threading.ContextCallback,System.Object的,布尔型)在System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
在System.Threading.ThreadPoolWorkQueue.Dispatch()在System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

并最终Http请求开始失败:

进程信息:
进程ID:3344
进程名称:w3wp.exe
帐户名:NT AUTHORITY\NETWORK SERVICE
异常信息:
异常类型:HttpException
异常消息:页面文件太小,无法完成此操作.(来自HRESULT:0x800705AF的异常)
System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()
在System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager,IApplicationHost appHost,IConfigMapPathFactory configMapPathFactory )的System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()处. ,HostingEnvironmentParameters hostingParameters,PolicyLevel policyLevel,Exception appDomainCreationException)
页面文件太小,无法完成此操作.(来自HRESULT的异常:0x800705AF)

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

我不知道为什么WaIISHost.exe需要这么多,因为Run()方法只是做很轻的管家活动,比如每隔几分钟ping一次站点以保持应用程序在白天运行.

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

有什么想法是什么问题?如何配置更高的虚拟内存?

小智 8

您的应用程序代码中存在内存泄漏,您在Azure异常中捕获的内容只是环境内存耗尽的后果,因为应用程序代码消耗了所有内容,根据我的经验.

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

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

我还会坚持像newrelic或foglight这样的东西,这样你就可以清楚地了解你的代码/ Azure实例即将失败你还可以看到你的失败有什么时间表,并且可能获得更多的日志信息以及是否有任何导致您遇到的问题.