记一次 .NET 某汽贸店 CPU 爆高分析
💡
原文中文,约5500字,阅读约需14分钟。
📝
内容提要
文章讲述了一位朋友在github上求助线程卡住的问题,通过WinDbg分析发现是lock convoy现象导致CPU爆高。问题代码在将Byte[]转成DataTable时使用了大量反射和锁,导致锁竞争严重。缓解措施包括在CacheHelper.GetDataTable加串行锁和不转成DataTable。
🎯
关键要点
-
朋友在github上求助线程卡住的问题。
-
通过WinDbg分析发现是lock convoy现象导致CPU爆高。
-
问题代码在将Byte[]转成DataTable时使用了大量反射和锁。
-
锁竞争严重导致CPU利用率达到100%。
-
GetDataTable方法中有336个线程在争抢锁。
-
缓解措施包括在CacheHelper.GetDataTable加串行锁。
-
不转成DataTable,直接转成List可以避免锁竞争。
➡️