首页 新闻 赞助 找找看

请教下linux .net core3.1 下too many open files 几个疑问

0
悬赏园豆:50 [已解决问题] 解决于 2022-09-29 10:32

先说怀疑的对象:项目是插件式开发,有大量的loadAssembly。

  1. 这个错,到底指的是哪个超了,文件描述符数量还是句柄数量?
  2. ulimit -n 的数量为65535,我理解的是对应的文件描述符,可以发生错误的时候,使用lsof -n -u root | wc -l 查看数量并没有超。
  3. 所以是不是命令用错了,报错的时候数字都没有对的上。
一只小青蛙的主页 一只小青蛙 | 初学一级 | 园豆:3
提问于:2022-06-29 10:32
< >
分享
最佳答案
0

十有八九是代码问题,有没有在同步代码中调用 async 异步代码?参考博文 .NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长

收获园豆:40
dudu | 高人七级 |园豆:31075 | 2022-06-29 10:40

现在的问题就是不好定位,我看博客园之前是放到windows下重现,然后dump后分析出问题,linux下有好的办法定位这个问题吗

一只小青蛙 | 园豆:3 (初学一级) | 2022-06-29 13:25

@一只小青蛙: 建议检查一下代码中是否在调用 async 异步代码使用了 .Result 或者 Wait()

dudu | 园豆:31075 (高人七级) | 2022-06-29 14:52

@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);
}

一只小青蛙 | 园豆:3 (初学一级) | 2022-06-29 14:56

@一只小青蛙: 就是这种代码引起的,全部要改掉,不要存在任何侥幸心理

dudu | 园豆:31075 (高人七级) | 2022-06-29 18:42

@dudu: 经过实际验证,Assembly.Load在.net core3.1是会导致这个问题的,升级到6.0后万事大吉,一切OK。详见这两篇
https://github.com/dotnet/runtime/issues/47859
https://github.com/dotnet/runtime/pull/48140

一只小青蛙 | 园豆:3 (初学一级) | 2022-09-29 10:31
其他回答(1)
0

//安装工具
dotnet tool install dotnet-dump

//dump 内存文件
dotnet-dump collect

//分析内存文件
dotnet-dump analyze

文档: https://docs.microsoft.com/zh-cn/dotnet/core/diagnostics/dotnet-dump

收获园豆:10
czd890 | 园豆:14292 (专家六级) | 2022-06-30 10:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册