Azure服务在几天后就会消失

时间:2013-05-08 16:58:04

标签: azure memory-leaks virtual

我有小型(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的可用内存。

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

1 个答案:

答案 0 :(得分:8)

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

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

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

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