记一次 .NET某智慧出行系统 CPU爆高分析 - 一线码农
💡
原文中文,约4900字,阅读约需12分钟。
📝
内容提要
文章讲述了一个系统出现CPU 100%的问题,通过使用WinDbg分析发现线程池被打满,任务队列累积了8694个任务。通过观察每个线程的堆栈,发现问题是因为writeClients池已满导致GetInActiveWriteClient方法返回null。进一步分析发现问题出在使用foreach迭代ServiceStack.Redis导致writeClient池耗尽。解决方法包括批量处理迭代、增加writeClient池大小和更换ServiceStack.Redis版本。
🎯
关键要点
-
系统出现CPU 100%的问题,线程池被打满,任务队列累积8694个任务。
-
使用WinDbg分析发现所有线程池线程被占满,导致无法获取Redis客户端。
-
问题源于GetInActiveWriteClient方法返回null,writeClients池已满。
-
foreach迭代ServiceStack.Redis导致writeClient池耗尽,造成大量请求阻塞。
-
解决方法包括批量处理迭代、增加writeClient池大小和更换ServiceStack.Redis版本。
➡️