记一次 .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版本。

🏷️

标签

➡️

继续阅读