1

我的小型 (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, Boolean) 在 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 框架版本:v4.0.30319 描述:进程因未处理的异常而终止。
异常信息:Microsoft.ApplicationServer.Caching.ConfigStoreException
堆栈:在 Microsoft.ApplicationServer.Caching.CustomProviderProxy+<>c
_DisplayClass5.<PerformOperation>b__3(System.Object)
在 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System .Threading.ContextCallback, System.Object, Boolean) 在 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.EnsureTopLevelFilesCompiled()
在 System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()
在 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 的可用内存。

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

4

1 回答 1

8

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

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

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

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

于 2013-05-08T19:44:53.713 回答