reactor线程阻塞引起故障

简介: 大致线程模型: jstack打印JVM堆栈,可以看到reactor线程阻塞了,导致它对应的前端连接无法使用。
  • 大致线程模型:

这里写图片描述


  • jstack打印JVM堆栈,可以看到reactor线程阻塞了,导致它对应的前端连接无法使用。阻塞在了oracle驱动rollback动作,这里其实是因为oracle驱动为了保证串行请求响应而在底层加了锁,而这个通道被慢语句塞住了,所以reactor线程都塞了。
"$_NIOREACTOR-7-RW" prio=10 tid=0x00007f069856f000 nid=0xde1 waiting for monitor entry [0x00007f0677011000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:1167)
    - waiting to lock <0x000000068086fbc0> (a oracle.jdbc.driver.T4CConnection)


"$_NIOREACTOR-4-RW" prio=10 tid=0x00007f069851e000 nid=0xddd waiting for monitor entry [0x00007f0677415000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:1167)
    - waiting to lock <0x000000068083cf80> (a oracle.jdbc.driver.T4CConnection)


"$_NIOREACTOR-0-RW" prio=10 tid=0x00007f06984b2000 nid=0xdd9 waiting for monitor entry [0x00007f0677819000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:1167)
    - waiting to lock <0x000000068081c5f0> (a oracle.jdbc.driver.T4CConnection)

这里写图片描述


  • 解决方案,异步化
    这里写图片描述

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================

欢迎关注:

这里写图片描述

目录
相关文章
|
3月前
|
负载均衡 算法 安全
基于Reactor模式的高性能网络库之线程池组件设计篇
EventLoopThreadPool 是 Reactor 模式中实现“一个主线程 + 多个工作线程”的关键组件,用于高效管理多个 EventLoop 并在多核 CPU 上分担高并发 I/O 压力。通过封装 Thread 类和 EventLoopThread,实现线程创建、管理和事件循环的调度,形成线程池结构。每个 EventLoopThread 管理一个子线程与对应的 EventLoop(subloop),主线程(base loop)通过负载均衡算法将任务派发至各 subloop,从而提升系统性能与并发处理能力。
168 3
|
3月前
|
Java API 调度
从阻塞到畅通:Java虚拟线程开启并发新纪元
从阻塞到畅通:Java虚拟线程开启并发新纪元
320 83
|
5月前
|
安全 Java 调度
Netty源码—3.Reactor线程模型二
本文主要介绍了NioEventLoop的执行总体框架、Reactor线程执行一次事件轮询、Reactor线程处理产生IO事件的Channel、Reactor线程处理任务队列之添加任务、Reactor线程处理任务队列之执行任务、NioEventLoop总结。
|
5月前
|
安全 Java
Netty源码—2.Reactor线程模型一
本文主要介绍了关于NioEventLoop的问题整理、理解Reactor线程模型主要分三部分、NioEventLoop的创建和NioEventLoop的启动。
|
编解码 网络协议 API
Netty运行原理问题之Netty的主次Reactor多线程模型工作的问题如何解决
Netty运行原理问题之Netty的主次Reactor多线程模型工作的问题如何解决
114 1
|
SQL Dubbo Java
线程池故障梳理总结
线程池故障梳理总结
|
7月前
|
SQL Dubbo Java
线程池:故障梳理总结
本文从故障视角和技术视角深入分析了线程池类问题,帮助开发者理解故障原因及优化方法。故障视角中,总结了数据库相关(如热更新、大表加字段、索引问题)、深分页、调用量过大等典型场景,指出慢SQL或高并发可能导致线程池满,最终影响服务可用性。技术视角则聚焦于远程调用IO慢、计算密集型任务及自定义线程池配置不当等问题,强调通过设置合理的超时时间(如ConnectionTimeout、SocketTimeout)和采用fast-fail理念来快速失败,避免资源浪费。同时,文章建议通过流控、背压机制保护系统,并谨慎处理重试逻辑以防止雪崩效应。这些经验和教训对提升系统稳定性具有重要参考价值。
153 0
|
SQL druid Java
线程池相关故障问题之Druid数据库连接池中,为何需要设置TransactionTimeout
线程池相关故障问题之Druid数据库连接池中,为何需要设置TransactionTimeout
502 0
|
10月前
|
Java API 调度
【JavaEE】——多线程(join阻塞,计算,引用,状态)
【JavaEE】——多线程,join,sleep引起的线程阻塞,多线程提升计算效率,如何获取线程的引用和状态
|
NoSQL Java Redis
Reactor实战,创建一个简单的单线程Reactor(理解了就相当于理解了多线程的Reactor)
本文通过一个简单的单线程Reactor模式的Java代码示例,展示了如何使用NIO创建一个服务端,处理客户端的连接和数据读写,帮助理解Reactor模式的核心原理。
149 0
Reactor实战,创建一个简单的单线程Reactor(理解了就相当于理解了多线程的Reactor)

热门文章

最新文章

下一篇
oss教程