记一次 .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方法进行排查。
➡️

继续阅读