蚁工厂
24-07-30 08:40 微博认证:科技博主

Netflix 技术团队发表了一篇博文介绍他们在使用 Java 21 虚拟线程时遇到的问题和解决思路
http://t.cn/A68aMv3J
Netflix 在迁移到 Java 21 并采用虚拟线程后,遭遇了服务间歇性超时和挂起实例的问题。经诊断发现问题出在 Tomcat 服务器中的虚拟线程在等待锁时被阻塞,导致操作系统线程被占用,无法为新请求服务。这种情况类似于传统的死锁问题,但在这里体现为一个锁和一个拥有 4 个许可的信号量(由 fork-join 线程池表示)之间的竞争。通过对锁的状态进行深入分析,Netflix 的工程师们发现了锁的中间状态,即锁已经被释放但下一个线程尚未获得锁的情况。这个问题的根源在于虚拟线程在等待锁时被错误地 pin 到操作系统线程上,导致无法释放这些线程。最终,Netflix 通过改进代码逻辑解决了这个问题,并对 Java 未来版本中虚拟线程和锁定原语的集成表示期待。

发布于 山东