ExecutorService的OOM坑

多线程的使用,避免ExecutorService 的创建处理 前言: 代码: package com.ly.tcgl.sellservice.web.controller; import com.google.common.util.concurrent.ThreadFactoryBuilder; import org.apache.tomcat.util.threads.ThreadPoolExecutor; import java.util.concurrent.*; /** * @title: 多线程的使用方式,遵守阿里巴巴的规则,否则的话容易产. 阅读详情

ExecutorService有下面几种创建方式

                   Executors.newCachedThreadPool();

                   Executors.newFixedThreadPool()

                   Executors.newScheduledThreadPool()

                   Executors.newSingleThreadExecutor()

                   Executors.newSingleThreadScheduledExecutor()

抽取其中一个方法查看源码:

publicstatic ExecutorService newFixedThreadPool(int nThreads) {

    return new ThreadPoolExecutor(nThreads,nThreads,

                                  0L, TimeUnit.MILLISECONDS,

                                  newLinkedBlockingQueue<Runnable>());

}

   /**

     * Creates a {@code LinkedBlockingQueue}with a capacity of

     * {@link Integer#MAX_VALUE}.

     */

   publicLinkedBlockingQueue(){

        this(Integer.MAX_VALUE);

    }

 

   /**

     * A constant holding the maximum value an{@code int} can

     * have, 2<sup>31</sup>-1.

     */

    public static final int   MAX_VALUE = 0x7fffffff;

 

 

由上面的方法参数知道,Executors创建的ExecutorService并不能设置控制消息队列的长列,默认长度是2^31,当线程处理速度较慢且并发任务太多时,任务队列的任务将不断堆积,就可能引起OOM。因此建议直接

 

ThreadPoolExecutor executor = new TThreadPoolExecutor(int corePoolSize,

                              intmaximumPoolSize,

                              longkeepAliveTime,

                              TimeUnit unit,

                             BlockingQueue<Runnable> workQueue)

这样就可以灵活定制队列,建议使用new ThreadPoolExecutor。

 


Oracle Linux中/var/log/pcp/pmlogger目录膨胀问题分析与解决 本文详细分析了Oracle Linux系统中/var/log/pcp/pmlogger目录异常膨胀的常见原因与解决方案。当PCP性能监控框架的pmlogger服务日志轮转或清理机制失效时,会导致该目录无限增长,威胁系统稳定。文章提供了从服务状态诊断、配置文件审查到安全清理与预防策略的全流程实战指南,帮助运维人员快速回收磁盘空间并恢复服务正常运行。 阅读详情

相关推荐

ESP32开发环境与微信小程序通信的完整示例

通过搭建稳定的esp32开发环境,实现其与微信小程序间的双向通信,涵盖Wi-Fi连接、数据收发与协议设计,为物联网应用提供低成本解决方案。

weixin_42126677的博客 1133

线程池—ScheduledThreadPoolExecutor 存在OOM问题

原因 ScheduledThreadPoolExecutor继承自ThreadPoolExecutor,而前者构造方法调用的是后者的构造方法,而且maximumPoolSize值为Integer.MAX_VALUE,这会导致缓冲队列中存在过多任务对象没有被处理并回收内存。 demo @Test public void main() { int coreThreadCount = 1; ThreadFactory threadFactory = new ThreadFactoryBuilde

~_~的博客 3689

哈工大集合论与图论(下)慕课MOOC答案

答案选自2023哈工大集合论与图论慕课,慕课的题重复率很高并且具有极高的相似性,选答案时要格外注意对比选项,能力有限答案不一定面面俱到,整理不易读者且用且珍惜。

qq_34168477的博客 2904

【Java】线程池为什么不推荐Executors创建,会产生OOM

之前面试的时候只知道推荐使用ThreadPoolExecutor的构造方法来创建线程池,使用Executors创建线程池可能会报OOM异常,但是不知道为什么会报这个,现在一篇文章彻底弄懂corePoolSize:核心线程数,就是最小可以同时运行的线程数量maximumPoolSize:当队列中存放的任务达到队列容量的时候,当前可以同时运行的最大线程数量就编程最大线程数workQueue:当新任务来的时候,判断正在运行的线程数是否达到了核心线程数,达到了就把新的任务存放到队列中。

weixin_45577687的博客 1597

MIPI转LVDS芯片调试实战:从Kernel到UEFI的完整点亮流程

本文详细解析了MIPI转LVDS芯片调试的全流程,从Kernel驱动开发到UEFI早期初始化,涵盖I2C通信、电源时序控制等核心挑战。通过LT9211芯片实战案例,提供设备树配置、电源时序优化及显示异常排查等实用技巧,助力工程师高效完成屏幕调试工作。

weixin_30314813的博客 452

告别付费!手把手教你用DataV.GeoAtlas获取全国街道级GeoJSON数据(附完整避坑指南)

本文详细介绍了如何免费使用阿里云DataV.GeoAtlas工具获取全国街道级GeoJSON数据。通过可视化选取、格式转换、数据校验等步骤,提供了一套完整的避坑指南和工作流,帮助前端和可视化开发者高效解决高精度地图数据获取难题,节省成本并提升开发效率。

weixin_29085865的博客 902

编码踩坑——多线程可能带来意想不到的OOM

多线程技术数据Java基础中比较重要的知识点;实际使用时,我们往往会用线程池来管理我们的异步线程,本篇介绍一个由于使用ExecutorCompletionService多线程可能导致的OOM问题,开发时要千万小心,即使用一套JDK API时一定要熟悉其原理和可能踩的坑,不要只看到其好处拿来就用,搞不好就要出线上事故;.........

娜娜米的博客 1884

MapGIS地质剖面图绘制实战:从数据准备到整饰出图

本文详细解析了MapGIS地质剖面图绘制的全流程,从数据准备到整饰出图,涵盖了等高线处理、GRD格网化、比例尺控制等关键步骤。通过实战技巧和案例分析,帮助地质工作者高效完成专业地质剖面图绘制,提升矿产勘探和工程勘察的工作效率。

weixin_28335283的博客 592

【线程池】ScheduledExecutorService接口和ScheduledThreadPoolExecutor定时任务线程池使用详解

一篇文章带你快速了解ScheduledExecutorService接口和ScheduledThreadPoolExecutor定时任务线程池。

小七的博客 8611

利用Openlayers4实现地图遮罩效果(二)

之前实现的遮罩效果,在深色背景的底图上,对要突出的区域采用半透明遮罩,以此来突出该区域。但是有时底图颜色偏白,这时候不再适合对要突出的区域采用遮罩,而是要对突出区域之外进行遮罩处理。两种效果的对比入下图: ...

此爱如少年 6399

Ubuntu下Vim创建属于自己的头部注释和代码模板

痛点 每次打开vim想写个C或者C++的程序都要把固定的模板敲一遍,是不是感觉非常的繁琐,能不能把Vim弄得像IDE那样新建一个文件直接生成对应的头部注释和代码模板,减少这些重复工作呢?下面我尽量详细的介绍实现的方法: 先看看新建文件后的效果 C语言格式效果 C++语言效果 方法: 使用命令 vi /etc/vim/vimrc 打开vimrc这个文件,然后复制以下代码至文件末尾的空白处即可! 修改vimrc文件里面的内容必须要用root管理员身份才能进行修改,修改时先切换至root身份即可。 "新建.

weixin_42137584的博客 1561

为什么阿里巴巴要禁用Executors创建线程池?

看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,通过源码分析禁用的原因 写在前面 首先感谢大家在盖楼的间隙阅读本篇文章,通过阅读本篇文章你将了解到: 线程池的定义 Executors创建线程池的几种方式 ThreadPoolExecutor对象 线程池执行任务逻辑和线程池参...

Java笔记虾 3125

库存优化技术提升电商效率

第一部分:库存优化技术基础 第1章:库存优化的基本概念 库存优化是现代电商运营中至关重要的一个环节。简单来说,库存优化指的是通过一系列的策略和技术手段,使得库存管理更加高效、准确,从而降低运营成本,提高销售额。 1.1 库存优化的定义与重要性

AI天才研究院 1248

Java 21虚拟线程实战:3分钟上手,性能提升10倍,彻底告别OOM!

以前,Java 线程是“贵族”,一个线程就要占 1MB 内存。虚拟线程的创建成本比你从池里取一个线程还低。池化虚拟线程不仅没用,反而会增加调度开销。块且包含 IO 操作,虚拟线程会“卡死”在操作系统线程上,导致性能急剧下降。如果是计算密集型(如视频转码、大数运算),老老实实回平台线程。你可以在你的破笔记本上,轻轻松松开出。以前我们要为了省线程去学复杂的异步框架,现在?,上手虚拟线程第一件事就是想搞个“虚拟线程池”。虚拟线程虽好,但乱用真的会出事!:虚拟线程不是万能药,它只针对。如果你原来的代码用的是。

毛尖 257

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【架构实战】百万级Excel数据导入的“坑”与“填坑”指南(下):多线程与批量入库全代码实战

本文介绍了使用EasyExcel实现百万级Excel数据导入的实战方案。通过多线程并发读取多Sheet、分批处理数据、数据库批量插入等技术手段,解决了OOM、性能低下和错误处理三大难题。核心实现包括:1)自定义ReadListener进行数据校验和分批处理;2)使用线程池并发解析多Sheet;3)MyBatis批量插入优化I/O性能。方案采用分批短事务、失败重试和脏数据日志补偿等策略确保系统稳定性,实测百万数据导入耗时约100秒。关键注意事项包括线程池与数据库连接池的配置平衡、Listener状态隔离以及数

2401_87808951的博客 476

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

线程池ThreadPoolExecutor和ExecutorService

线程池ExecutorService和ThreadPoolExecutor ExecutorService返回的线程池对象的弊端如下:1)FixedThreadPool和SingleThreadPool:允许的请求队列长度为Integer.MAX_VALUE,可能会堆积大量的请求,从而导致OOM。2)CachedThreadPool和ScheduledThreadPool:允许的创建线程数量为In...

qq_35086941的博客 2619

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ExecutorService

当你想要创建线程来执行任务的时候, 如果你new Thread()来创建的话,就太low了,第一 频繁的new Thread会大量消耗系统性能,第二 大量重复创建线程会导致线程太多导致系统OOM第三 相比ExecutorService来说 thread少了很多线程操作。

Small_white_528的博客 1602

从频繁OOM到系统稳如老狗,线程池 ExecutorService 救了我三次

坑后果解决方案忘记关闭线程池JVM 无法退出,端口被占用shutdown()模板无界队列任务堆积导致 OOM用get()不设超时下游故障导致线程池占满所有get()强制带超时参数线程池大小设置不当过小排队、过大浪费资源根据 CPU 核数和任务类型动态计算滥用线程数暴涨打挂服务器生产环境禁用,手动创建 ThreadPoolExecutor不处理失效任务中正确处理中断线程不命名排查问题找不到对应业务ExecutorService 是 Java 并发编程的必修课。

qq_37329779的博客 20

Java 25结构化并发:3个必须重写的ExecutorService迁移模板,否则上线即OOM

Java 25结构化并发实战案例助你规避OOM风险,提供3个ExecutorService迁移模板,覆盖Web请求、定时任务与批处理场景;基于VirtualThread与StructuredTaskScope实现资源可控、异常可追溯、生命周期自动管理。值得收藏

DebugLoom的博客 340

java ExecutorService线程池使用(ExecutorService/Completable异步+ExecutorService线程池)

使用自定义配置的线程池,// 核心线程数// 最大线程数// 非核心线程空闲存活时间// 有界队列// 拒绝策略,默认就是拒绝策略// 创建自定义线程池unit,workQueue,handler// 创建自定义线程池(周期性执行)unit,workQueue,handlerCPU 密集型:CPU 核心数 + 1(减少上下文切换)IO 密集型:2 * CPU 核心数(线程常阻塞,需更多线程)根据系统资源设置,避免资源耗尽(如 corePoolSize * 1.5)

abcnull 的博客 1483

ExecutorService 的使用

摘要:ExecutorService是Java并发编程中的重要接口,但使用不当会导致严重问题。Executors提供的四种线程池(newSingleThreadExecutor、newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool)在默认配置下存在OOM风险。特别需要注意的是,线程池不会随main方法结束自动关闭,必须手动调用shutdown()方法,并配合awaitTermination()设置超时时间,最后用shutdownNow()

屋顶小黑猫 1252

ExecutorService引发的血案(一)结构

最近使用了github上面的一个多线程下载的库 MultiThreadDownloader,发现挺好用。于是打开看了一下源码,发现了ExecutorService这个东西。之前多多少少接触到了这个东西,知道是java并发编程里面使用的,但是一直不是很了解所以花点时间看了一下。下面这张图,就是ExecutorService的结构图Executorsclass 这个类是一个工厂类,里面封装了很多构建`E

初心 3166

反向压力:异步系统中的OOM问题

导Lead语异步系统中为什么会出现OOM问题?如何避免?揭秘时刻到啦!今天小编带大家了解异步系统中的OOM问题。在Java编程中,我们经常使用ExecutorService线程池服务类来...

华章IT官方博客 550

Android中线程池ExecutorService的使用

这两天看了一下有关线程方面的使用。以前我通常只是通过new Thread(){}.start;来创建一个线程并进行相应的使用,可是没有考虑过当线程过多,从而影响到手机的性能。看了一些有关线程池方面的东西,现在这里写下初步认识,以备以后查阅,个人笔记,如果有朋友有更多了解,请通知我。其中部分文章来自网络转载。 下面先说说直接new Thread的缺点: 1,每次new Thread新建对象就要开

wy1987_708的专栏 2398

多线程使用不当导致的 OOM

程序员的成长之路互联网/程序员/技术/资料共享关注阅读本文大概需要 7 分钟。来自:juejin.cn/post/7064376361334358046事故描述从 6 点 32 分开始少量用户访问 App 时会出现首页访问异常,到 7 点 20 分首页服务大规模不可用,7 点 36 分问题解决。整体经过6:58 发现报警,同时发现群里反馈首页出现网络繁忙,考虑到前几日...

良月柒 370

模拟下线程池队列无界或线程无限的OOM情况

Idea先修改下JVM运行参数,改小些,容易测试出结果 拿newSingleThread这个等待队列是无界的线程池模拟OOM情况 public class TestMain { //newSingleThread这个类型的线程池,等待队列是无界的 static ExecutorService executorService = Executors.newSingleThr...

硅脂味咖啡的博客 1669
上一篇: 云中取物--app端的日志采集系统
下一篇: 故障定位及性能调优
ChainCode
ChainCode 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄11年 115粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值