【问题标题】:Azure service dies after a few days几天后 Azure 服务终止
【发布时间】:2013-05-08 16:58:03
【问题描述】:

我的小型 (x2) 云服务可以正常运行 4 到 6 天,但随后它变得无响应,需要通过 Azure 门户手动重新启动才能使其重新上线。

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'>1026200x800000000000001138ApplicationRD00155D45A2AD应用程序: 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 请求开始失败:

工艺信息:
进程 ID:3344
进程名称:w3wp.exe
帐号名称:NT AUTHORITY\NETWORK SERVICE
异常信息:
异常类型: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 门户中的可用内存监控显示该服务在崩溃前的整个期间有 300-800MB 的可用内存。

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

【问题讨论】:

  • 您显然有某种内存泄漏。您保留的任何变量(静态或其他)?日志?收藏?甚至可能是通过依赖注入框架创建的东西?同时,您总是可以编写一个简单的 PowerShell 脚本来每晚重新启动实例,直到您弄明白为止。

标签: azure memory-leaks virtual


【解决方案1】:

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

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

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

我还会坚持使用 newrelic 或foglight 之类的东西,以便您清楚地了解您的代码/Azure 实例即将失败您还可以查看失败的时间尺度,并可能获取更多日志信息以及是否存在是导致您遇到的问题的任何原因。

【讨论】:

  • 尽管@JamesKn 只有 1 个 StackOverflow 点,但这是非常好的建议!听詹姆斯的!
  • 感谢您提供好的建议和指向好工具的指南。 Redgate ANTS 确实有助于调试内存泄漏。
猜你喜欢
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多