先说怀疑的对象:项目是插件式开发,有大量的loadAssembly。
十有八九是代码问题,有没有在同步代码中调用 async 异步代码?参考博文 .NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长
现在的问题就是不好定位,我看博客园之前是放到windows下重现,然后dump后分析出问题,linux下有好的办法定位这个问题吗
@一只小青蛙: 建议检查一下代码中是否在调用 async 异步代码使用了 .Result
或者 Wait()
@dudu: 是指的这种不~
var resp = httpClient.PostAsync(requestUrl, new StringContent(postBody, Encoding.UTF8, "application/json")).Result;
var data = resp.Content.ReadAsStringAsync().Result;
if (resp.StatusCode != System.Net.HttpStatusCode.Created)
{
throw new Exception("无法获取token,错误原因:" + data);
}
@一只小青蛙: 就是这种代码引起的,全部要改掉,不要存在任何侥幸心理
@dudu: 经过实际验证,Assembly.Load在.net core3.1是会导致这个问题的,升级到6.0后万事大吉,一切OK。详见这两篇
https://github.com/dotnet/runtime/issues/47859
https://github.com/dotnet/runtime/pull/48140
//安装工具
dotnet tool install dotnet-dump
//dump 内存文件
dotnet-dump collect
//分析内存文件
dotnet-dump analyze
文档: https://docs.microsoft.com/zh-cn/dotnet/core/diagnostics/dotnet-dump