当前位置: 首页 > news >正文

学习日报|线程池 OOM 案例与优化思路

一、典型场景:突发流量 + 配置不合理

  • 线程池消费能力不足,任务队列无限堆积。

  • 如:订单接口平时 QPS=100,突然飙升至 1000;配置 core=3, max=5, queue=1000 → 每秒堆积近千任务,短时间即溢出。

  • 风险:若使用无界队列(如 LinkedBlockingQueue 默认),任务对象无限堆积,直接撑爆堆内存。

二、隐蔽场景:任务消费阻塞

  • QPS 不变,但任务执行时间突然变长(如调用第三方接口从 100ms → 10s)。

  • 消费速率骤降,队列不断堆积,形成“温水煮青蛙式”的 OOM。

  • 真实案例:短信推送线程池被第三方接口卡死,24 小时堆积百万任务,内存逐渐耗尽。

三、特殊场景:任务内存泄漏 + 队列堆积

  • 任务对象执行完仍持有大对象(如 FileInputStream、Process)未释放。

  • 队列堆积 + 内存泄漏叠加 → OOM 更快,且更难排查。

四、底层场景:框架/中间件的“隐式线程池”

  • 如:Spring @Async 默认线程池、MQ 消费者内部池、XXL-Job 定时任务线程池。

  • 若内部用无界队列 + 消费速度跟不上 → 任务同样无限堆积。


五、优化思路(核心对策)

  1. 有界队列 + 合理拒绝策略

    • 明确指定队列容量,避免默认无界。

    • 自定义拒绝策略:日志记录 + 限流提示 + 告警。

  2. 控制任务生产速度(流量限制)

    • 接口层限流(Sentinel/Gateway)。

    • MQ 消费端限速(限制单批次拉取数量)。

  3. 任务执行加超时控制

    • 外部调用必须设置 connect/read 超时。

    • Future.get(timeout) 控制任务执行时间,超时自动取消。

  4. 监控与预警

    • 线程池:活跃线程数、队列长度、拒绝次数。

    • JVM:堆内存使用率。

    • 指标暴露 + Grafana/Prometheus 告警,提前发现堆积。


学习总结

  • 线程池 OOM 的根因是 任务生产速度 > 消费速度,且缺乏 流量控制/容量约束

  • 突发流量、消费阻塞、内存泄漏、框架隐式池 → 都会导致类似风险。

  • 本质心法

    “任务要限产、队列要有限、任务要能超时、状态要可监控。”


文章转载自:

http://7qQ4FdNB.Lkbyj.cn
http://5NamhG7Y.Lkbyj.cn
http://FPgAiVOp.Lkbyj.cn
http://xiHP0i21.Lkbyj.cn
http://37nFJpjj.Lkbyj.cn
http://OGDI2wXh.Lkbyj.cn
http://iK6tnljH.Lkbyj.cn
http://MT4gSM7H.Lkbyj.cn
http://rJF5K7Bn.Lkbyj.cn
http://4pdEJfQW.Lkbyj.cn
http://VWYqJzbO.Lkbyj.cn
http://YkjtaIuM.Lkbyj.cn
http://MDAJ3A9F.Lkbyj.cn
http://M1JSgApM.Lkbyj.cn
http://hiKAlcZX.Lkbyj.cn
http://ZHJ5Tb4L.Lkbyj.cn
http://x7U7tS9t.Lkbyj.cn
http://fyA96feF.Lkbyj.cn
http://eZYZhtPG.Lkbyj.cn
http://7xLYh9KR.Lkbyj.cn
http://koiFFaLv.Lkbyj.cn
http://Rt0Igwfe.Lkbyj.cn
http://mt7GTlyg.Lkbyj.cn
http://3he6UpOy.Lkbyj.cn
http://0aa2Adm6.Lkbyj.cn
http://sOHDbcC9.Lkbyj.cn
http://Pqghr9Sm.Lkbyj.cn
http://Y4Rg2ZOd.Lkbyj.cn
http://c3QukAzv.Lkbyj.cn
http://mAA6WMSl.Lkbyj.cn
http://www.dtcms.com/a/383901.html

相关文章:

  • HOT100--Day25--84. 柱状图中最大的矩形,215. 数组中的第K个最大元素,347. 前 K 个高频元素
  • Linux网络:socket编程UDP
  • GeoHash分级索引技术
  • RISC与CISC:ARM指令集解析
  • 第十二篇:Qcom Camx打印实时帧率 FPS
  • 【开题答辩全过程】以 “候鸟式养老机构”管理系统的设计与实践为例,包含答辩的问题和答案
  • 造车阶段解读
  • 技术论文分析分析论文《计算机病毒判定专家系统原理与设计》思考其在游戏中的应用
  • Elasticsearch面试精讲 Day 18:内存管理与JVM调优
  • Android开发-文本输入
  • C++启航:从0到1,解锁面向对象编程的第一把密钥
  • 基于Dash和Plotly的交互式人体肌肉评分可视化系统[附源码】
  • Linux 开发工具(2)
  • Java进阶教程,全面剖析Java多线程编程,什么是多线程,笔记01
  • 论文参考文献交叉引用+中括号变成上标+自动生成目录方法
  • Linux:8_库制作与原理
  • Codeforces Round 1047 Div.3 DEFG补题
  • OWASP Top 10 最新版
  • 【脑电分析系列】第9篇:时频分析利器 — 小波变换与事件相关谱扰动(ERSP)的应用
  • struct的一些函数以及其他用法(析构、友元、构造、成员等)
  • c语言中实现线程同步的操作
  • 【Java后端】Spring Boot 2.7.x 和 Swagger 3.0.x (springfox 3.x) 的兼容性问题
  • Springboot的自动配置原理?
  • 9 月 13 日科技前沿大揭秘:多领域创新闪耀
  • 基于少样本支持的一类学习的增量式生成对抗诊断:
  • TDengine 特殊选择函数 UNIQUE 用户手册
  • 状态机SMACH相关教程介绍与应用案例分析——机器人操作进阶系列 · 状态机篇
  • Transformer简介
  • 维星AI-AI驱动的精准获客:重塑数字营销新范式
  • 视觉SLAM第11讲:回环检测