有没有 .NET 大神帮忙看看困扰了好几个大神一年的内存泄露问题,优化了一年越变越严重,现在一小时崩一次

24 天前
 drymonfidelia
这一年在 V 站关于这个问题已经发了好几个贴了,一直没解决 /t/1037900
已经从 ASP.NET Core 5 升级到 6 了,之前升过 8 内存泄露更严重了,又退回 6
最早加每 5 分钟强制 GC 一次,缓解了几个月,又开始两天一崩
然后搞了双实例负载均衡,两台机器 4 小时重启一次,重启时间错开,缓解了几个月
最近请求量翻了两倍,然后变成了一小时一崩,这么频繁重启再接下去肯定会出现重启也解决不了问题的情况,只好再来求助
目前请求量是每天 6~9 千万(客户端大量轮询请求,随硬件分发无法更新,导致请求量比较大)
按照 https://learn.microsoft.com/zh-cn/dotnet/core/diagnostics/debug-memory-leak 的教程,运行 10 分钟后抓取 dump 的 heap statistics 如下
https://pastebin.com/BnxB8S0R

另外 analyze 的时候所有命令都提示 ERROR: The GC heap is not in a valid state for traversal. (Use -ignoreGCState to override.) 加上 -ignoreGCState 又不返回内容,不知道为什么,stackoverflow 上的几个方法都无效
3461 次点击
所在节点    .NET
25 条回复
aw2350
24 天前
建议检查 引用的第三方包;再检查类似 闭包 的方法使用导致 内存逃逸
Smokovsky
24 天前
VS 搞不定就 windbg ,再搞不定就去公众号 @一线码农聊技术,专门搞.net 泄露/异常的,一般最多花个几百就能搞定。
yazoox
24 天前
follow, take a look. :-)
ke1e
23 天前
@ppxppx 你只要不 unsafe ,几乎不会出现泄露
ppxppx
23 天前
@ke1e 我以前用 rust 写过一个转发流量的应用,遇到一个 bug 好像就是 TCP 连接关闭后忘记在 map 释放对象了,导致的结果就是运行一会服务器内存就爆炸了。我觉得这种类型的泄漏没有语言能解决。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1076054

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX