gpt4 book ai didi

c# - IIS System.OutOfMemoryException 问题 Web 服务

转载 作者:行者123 更新时间:2023-12-04 16:03:51 24 4
gpt4 key购买 nike

我们有一个 Asp.Net Web 服务有

System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.     at System.Threading.Thread.StartInternal(IPrincipal principal, StackCrawlMark& stackMark)     at System.Threading.Thread.Start()

作为临时修复,我们正在刷新应用程序池。问题似乎每 4-5 小时就会重新出现一次。Web 服务基本上从 SQL 服务器数据库返回存储过程中的数据。这是一个遗留应用程序,多年来没有进行任何代码更改。有没有可能稳定多年的应用程序突然出现内存泄漏问题?

最佳答案

您将需要分析 IIS 应用程序池的内存转储以解决此问题。我过去也做过同样的事情,一旦您熟悉了这些工具就不会太困难。

  1. WinDbg - https://go.microsoft.com/fwlink/p/?LinkId=536682 - 确保您只安装 Windows 组件的调试工具完整 SDK 的链接
  2. Windows 符号服务器 -srvc:\symbolshttps://msdl.microsoft.com/download/symbols。之内WinDbg File 菜单,选择 Symbol File Path 并添加这个路径(你可以更改 c:\symbols 的位置但确保该目录存在并且在进行调试工作的系统本地)。
  3. SOS WinDbg 扩展 - C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SOS.dll。将此 DLL 复制到 Windows 目录的调试工具

安装工具后,您需要获取内存转储并进行分析。

  • 通过任务管理器获取应用程序的内存转储。确保使用与您的应用程序相同的位任务管理器,即如果您的 IIS 应用程序池以 64 位运行,则使用 64 位任务管理器实例。
  • 使用适当的 32/64 位版本的 WinDbg,然后通过 WinDbg 中的文件菜单打开内存转储。
  • 加载内存转储后,使用此命令加载 sos: .loadby sos clr
  • 有许多有用的 sos 命令可用于故障排除,但我们对内存问题感兴趣的命令是:!dumpheap -stat。这将为您提供所有当前加载的类型以及它们使用的内存量。
  • 您可能还想确认这不是线程争用问题。可以提供帮助的命令是:!sos.syncblk 查看是否有任何线程被阻塞,!runaway 查看是否有任何线程运行了过多的时间时间。这两种情况都可能导致应用程序变得无响应,并且可以通过 IISRESET 或回收来修复。

同样,WinDbg 有一点学习曲线,但一旦您克服了这个障碍,就可以非常容易地快速诊断此类问题。

关于c# - IIS System.OutOfMemoryException 问题 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49590584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com