记一次 .NET某报关系统 非托管泄露分析
💡
原文中文,约7000字,阅读约需17分钟。
📝
内容提要
本文讲述了作者在Linux环境下分析.NET程序内存暴涨问题的经历。作者使用WinDbg工具发现内存占用较大且存在非托管内存泄漏。通过排除法确定是非托管代码创建的可疑动态链接库数量过多。作者使用dotnet-trace工具捕获程序集加载事件,并使用perfview工具观察调用堆栈,发现是某个方法内部调用了Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.EvaluateAsync生成了大量程序集。最后建议剔除该方法进行排查。
🎯
关键要点
- 作者在Linux环境下分析.NET程序内存暴涨问题。
- 使用WinDbg工具发现内存占用较大且存在非托管内存泄漏。
- 通过排除法确定是非托管代码创建的可疑动态链接库数量过多。
- 使用dotnet-trace工具捕获程序集加载事件。
- 使用perfview工具观察调用堆栈,发现是某个方法内部调用了CSharpScript.EvaluateAsync生成了大量程序集。
- 建议剔除CSharpScript.EvaluateAsync方法进行排查。
➡️