记一次 .NET 某电商无货源后端服务 死锁分析 (3)

同时 25号线程正在反向做这个操作,由于大家都是双重 lock,所以最终导致 死锁 的发生。

三:有几个需要解答的问题 1. 为什么会有两个线程池?

从线程栈对象看,应该也看到了有两个线程池 ExclusiveConnectionPool。

0:000> !dumpheap -type ExclusiveConnectionPool -stat Statistics: MT Count TotalSize Class Name 00007ffb1d25eca0 2 464 MongoDB.Driver.Core.ConnectionPools.ExclusiveConnectionPool

这是由于朋友的 mongodb 连接串 用的是双IP的副本集模式。

{ "mongo": { "Connection": "mongodb://xxx.aliyuncs.com:3717,xxx.aliyuncs.com:3717/admin?replicaSet=mgset-500180544&readPreference=secondaryPreferred&maxPoolSize=1000&wtimeoutMS=10000" } } 2. 是程序员的锅吗?

从堆栈信息看并不是程序员的锅,是 mongodb 在接收异步回调时,由于某种情况发生了 OperationCanceled 异常,面对异常的后续处理逻辑时出现了死锁bug。

3. 当前的 mognodb sdk版本是多少?

这个mongodb 官方驱动是 2.13.1.0,也就是 2021-8-15 发布的,截至最新的是 10月份发布的 2.13.2.0。

记一次 .NET 某电商无货源后端服务 死锁分析

4. 反馈

了解这些信息后,和朋友做了沟通,朋友说他给 mongodb 社区提交 issue,几天后,官方给的回答是在最新的 v2.14.beta1 中做了处理。

https://github.com/mongodb/mongo-csharp-driver/commit/b961b81cb7dc1ffe7262c55a227afad0aab5a994

https://jira.mongodb.org/browse/CSHARP-3815

也就是说在未来的 release v2.14.0 版本中会得到解决,目前也只能等一等啦! 期待中。。。哈哈

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwszf.html