我有小型(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
堆栈:at Microsoft.ApplicationServer.Caching.CustomProviderProxy + LT;> C_ DisplayClass5.b _3(System.Object的)
在 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback,System.Object,Boolean)at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
在System.Threading.ThreadPoolWorkQueue.Dispatch()at 的System.Threading。 ThreadPoolWaitCallback.PerformWaitCallback()
| HTTP://schemas.microsoft.com/win/2004/08/events/event'> 1026200x800000000000001138ApplicationRD00155D45A2ADApplication: CacheService.exe Framework版本:v4.0.30319描述: 由于未处理的异常,该流程终止 例外信息: Microsoft.ApplicationServer.Caching.ConfigStoreException
堆栈:at Microsoft.ApplicationServer.Caching.CustomProviderProxy + LT;&以及c _DisplayClass5< PerformOperation> b__3(System.Object的)
在 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback,System.Object,Boolean)at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
在System.Threading.ThreadPoolWorkQueue.Dispatch()at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
最终Http请求开始失败:
流程信息:
进程ID:3344
进程名称:w3wp.exe
帐户名称:NT AUTHORITY \ NETWORK SERVICE
例外信息:
异常类型:HttpException
异常消息:页面文件太小,无法完成此操作。 (来自HRESULT的异常:0x800705AF)at 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,Exception appDomainCreationException)
页面文件太小,无法完成此操作。 (HRESULT异常:0x800705AF)
我不确定问题是虚拟内存配置得太低,还是使用内存太高。 WaIISHost.exe虚拟内存使用肯定看起来很高,但似乎稳定在4.1 GB左右。
我不知道为什么WaIISHost.exe会需要这么多,因为Run()方法只是做很轻的管家活动,例如每隔几分钟ping一次网站以保持应用程序在白天运行。
Azure门户中的可用内存监控显示该服务在崩溃前的整个期间都有300-800MB的可用内存。
任何想法是什么问题?如何配置更高的虚拟内存?
答案 0 :(得分:8)
您的应用程序代码中存在内存泄漏,您在Azure异常中捕获的内容只是环境内存耗尽的后果,因为应用程序代码消耗了所有内容,根据我的经验。
通常情况下,当我将RDP放入框中时,确定具有内存泄漏的进程,然后使用Redgate工具(或任何其他工具)启动代码的分析会话。然后使用该工具运行您的过程半天,您应该很容易确定问题所在。
您可能会发现我猜这是一个异常,导致代码无法正常清理。这可以解释为什么你会在几天和几个例外之后看到这个问题。我会看看你的异常处理和清理代码。您应该测试代码库中的断开连接以及可能影响代码的其他瞬态位置。
我还会坚持使用像newrelic或foglight这样的东西,这样你就可以清楚地了解你的代码/ Azure实例即将失败你还可以看到你的失败有什么时间表,并且可能获得更多的日志信息,如果有的话是导致您遇到的问题的任何事情。