记一次 .NET某酒店后台服务 卡死分析
💡
原文中文,约7100字,阅读约需17分钟。
📝
内容提要
作者在分析系统出现大量http超时问题时,发现线程池中的工作线程都处于运行状态,线程池队列也积压了大量待处理任务。通过分析线程堆栈,作者发现问题是由开源的日志收集组件发送的心跳检测方法引起的。作者提出了两种解决方法:升级框架或者不使用该组件。文章还解答了关于线程注入速度的问题,指出在.NET Framework时代,线程池内部的GateThread线程每秒注入一个活线程。作者总结了分析问题时发现第三方组件可能拖垮程序的无奈感受。
🎯
关键要点
- 作者分析系统出现http超时问题,发现线程池工作线程都在运行,队列积压任务。
- 通过线程堆栈分析,发现问题源于开源日志收集组件的心跳检测方法。
- 提出两种解决方法:升级框架或不使用该组件。
- 线程饥饿的原因包括优先级倾斜、死锁、资源竞争、不公平调度、线程阻塞和线程池配置不当。
- 发现大量线程在Exceptionless的SendHeartbeat方法上等待,该方法使用同步方式发送HTTP请求。
- 解决方案包括升级到最新版本或使用替代品。
- 解释线程池注入速度的问题,.NET Framework时代每秒注入一个活线程,.NET 8已优化此过程。
- 总结发现第三方组件可能拖垮程序的无奈感受。
➡️