gpt4 book ai didi

c# - 针对 .NET 生产服务中的内存泄漏

转载 作者:可可西里 更新时间:2023-11-01 02:34:57 25 4
gpt4 key购买 nike

我有一个在生产环境中运行的 C#.NET 服务。该服务充当 TCP 服务器,客户端向其注册并发出请求。在查看任务管理器时,它似乎泄漏了大约 10MB/天。我似乎没有在开发中注意到这些(可能是因为流量和客户端事件少得多)。在四处搜索时,我了解到任务管理器可能会出现严重错误,但我不确定这有多准确,或者在什么情况下 TM 会显示不正确的信息。

为了解决这个问题,我需要更密切地监控内存消耗。问题是泄漏似乎只出现在生产中,部署的服务是为 Release 构建的。此外,由于它是一项无法通过附加分析器/调试直接在 VS 上运行的服务,因此我不确定如何使用比 TM 更精确的方法来最好地查明问题。

非常感谢任何团体智慧,谢谢。

编辑:

  • 我已经为服务的私有(private)字节(开始时为 7MB)以及所有堆中的 CLR 内存(开始时为 30MB)添加了 perfmon 计数器
  • 任务管理器说总内存约为 37MB,所以这似乎有道理
  • 第一部分是让服务运行一天,然后再次检查我的柜台。

如果我的私有(private)字节变大但 CLR 内存大致是静态的,这表明存在非托管泄漏。如果两者都变大,那就是有管理的泄漏。

谢谢你们。

最佳答案

您的首要任务是确定进程是否正在泄漏内存。您可以使用 perfmon 测量专用字节来执行此操作 http://www.goldstarsoftware.com/papers/CapturingVirtualBytesToALogFile.pdf

如果图形持续上升(比如半小时),则说明存在内存泄漏。然后您可以使用其他计数器来确定这是否是 .NET 泄漏(.NET 内存),尽管这不太可能。我发现在大多数情况下,有一个 COM 组件正在被调用但未被释放。

如果您真的有内存泄漏(这不仅仅是可变内存使用)- 进程将在运行一段时间后因内存不足异常而关闭。

关于c# - 针对 .NET 生产服务中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9637753/

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