【看得懂却用不好】系列-最大线程数之坑

1. 概述 

网络中诸多文章对java线程池的描述可谓入木三分,下边这段描述相信诸多JAVA开发早已熟知于心,但请留意今天的故事的主题是《看得懂却用不好》

java 线程池机制中,核心线程数提供了一个基础的线程池工作机制,保证了处理任务的基本能力,而最大线程数则提供了处理高负载时的扩展能力。合理配置这两个参数可以提高线程池的性能和资源利用率。

其中最大线程数则提供了处理高负载时的扩展能力这句话给许多研发同学带来了真香的感知,内心OS'平时没什么流量核心线程数设个20,应对并发峰值,最大线程数设置个1000够了吧’。看似合理实则有坑,一起来看本次故障处理。

2. 问题描述 

服务对每个请求的处理需要初始化一个引擎对象,但这个引擎对象的创建耗时较长,为了应对业务高峰期,通过线程池来预创建引擎对象,且每个新请求都会给线程池提交一个任务(大致理解是通过线程池来创建对象就好);线程池的两个核心参数设计为核心线程数20,最大线程数1000。看起来整体逻辑似乎没有问题,但在生产环境业务高峰期却出现了请求大量RT超过3秒,导致超时业务。

这是怎么回事呢?

3. 现象分析 

理论预期是这样:应对高并发,线程池里会增加更多的线程用于创建引擎对象,那么应该说CPU的使用率应该提高来创建更多的引擎对象,有了更多引擎对象请求的处理能力应该增加,那么网络流量应该是更高的,但实际情况却并非如此,看下图标红的两处,在出问题的时段能看到,CPU的使用率降低了,网络流量降低了,也就是说资源未充分的使用,服务的响应处理并不及时。

那么,为何如此?

4. 根因分析 

为节省读者老师时间,此处省略实际分析过程中走的弯路,咱们直奔本文主题。核心思路是通过监控工具分析引擎对象的创建过程

4.1 查看线程里的运行状态

一种传统方法是加日志,查看代码在什么时间开始执行,执行了多久,这种方法当然简单轻便但是我们不采用。

这里推荐给大家jdk自带的工具VisualVM,可直观查看线程的运行、空闲情况。关于此工具的具体操作读者朋友请自行百度,这里不再赘述,我们观察以下线程的运行效果

  1. 绿色代表线程处于运行状态
  2. 黄色代表线程处于等待状态

线程池中的这批线程居然在近25秒的时段内都处于等待状态,为何新增了这么多线程却不干活儿,长时间处于等待状态?

4.2 为何新增线程长时间等待

为了快速得到答案咱们问一问chatGPT得出如下答案:

瞬间创建成百上千的线程会对操作系统的线程时间分片策略产生影响。这种情况可能会带来一系列性能问题和系统资源挑战。以下是一些关键点和影响:

  1. 线程上下文切换开销定义:线程上下文切换是指操作系统在不同线程之间切换时,需要保存和恢复线程的上下文状态(如寄存器值、程序计数器等)的过程。影响:创建大量线程会导致频繁的上下文切换,因为操作系统需要在这些线程之间分配 CPU 时间。这会增加 CPU 的负担,降低系统的整体效率。
  2. 资源消耗内存使用:每个线程都有其自身的栈空间和其他资源。如果瞬间创建大量线程,会消耗大量内存,可能导致内存不足的问题。调度开销:操作系统的线程调度器需要管理和调度这些线程,增加了系统的调度开销。
  3. 时间分片策略定义:时间分片策略是操作系统分配给每个线程的 CPU 时间片的策略。线程调度器按照某种策略将 CPU 时间片分配给线程,以确保公平和高效的处理。影响:瞬间创建大量线程可能导致时间片分配不均匀。每个线程可能获得的 CPU 时间片变得非常短,从而增加了上下文切换的频率。这种频繁的切换会降低线程的实际执行效率,导致性能下降。
  4. 竞争和阻塞竞争:大量线程同时争用 CPU、内存和其他系统资源,可能导致资源竞争激烈,从而影响系统的响应能力和吞吐量。阻塞:一些线程可能会因为等待 I/O 操作、锁或其他资源而处于阻塞状态,这可能进一步加重系统的负担。
  5. 操作系统限制线程数限制:操作系统通常会对每个进程可以创建的最大线程数进行限制。超出这个限制可能会导致线程创建失败或系统不稳定。

...

总之,瞬间创建大量线程会对操作系统和应用程序产生负面影响,合理设计线程模型和资源管理策略是确保系统稳定性和性能的关键。

根据以上内容我们可得出以下结论:瞬间创建成百上千的线程,会导致操作系统线程时间分片策略调整,出现CPU使用率降低,线程处理单个认证任务的耗时增加,且运行间隔不稳定,持续一段时间后,操作系统的线程调度策略才趋于稳定

5. 解决方案 

这里的策略是固定线程数为50个(读者老师请按照实际测试情况来设定),相同的压力下,请求无超时,线程运行稳定,如下图:

当然本文并非是强调最大线程数没有用,而是从另外一个视角让读者了解到最大线程数设置不合理的副作用。 各位看官在实际使用过程中留意通过测试和工具(如VisualVM)来观察下实际效果。

本篇暂且介绍这些较核心的内容,希望能帮到读者老师。

6. 最后说一句 

我是石页兄,如果这篇文章对您有帮助,或者有所启发的话,欢迎关注笔者的微信公众号【 架构染色 】进行交流和学习。您的支持是我坚持写作最大的动力。

另外技术群中也有许多热心的大佬时常交流互助;可扫描下方笔者微信二维码,加 V 备注“加群”,期待并欢迎您的加入。

7. 中国数据库技术大会2024

关注公众号 + 加入微信群,可抽奖获得2024中国数据库技术大会门票

大会介绍:

为了紧跟时代步伐,引领前沿技术,由IT168联合旗下ITPUB、ChinaUnix两大技术社区主办的第15届中国数据库技术大会(DTCC2024)将于2024年8月22日至24日在朗丽兹西山花园酒店隆重召开。

附部分大会主题:

演讲主题演讲人公司职位
国产数据库应用迁移设计与开发规范邓琼中信银行软件开发中心系统支撑领域CTO
为什么大型数据库需要共享池吕海波美创科技技术专家,首席研究员
从根生长—第三代分布式数据库CCDB李海翔前腾讯TDSQL首席架构师
金融数据库数字化转型性能优化方法论林春太保集团数智研究院首席数据库专家
金融交易场景下数据库运维体系建设与思考张磊某金融科技公司数据库与存储团队负责人
多云数据库PG架构与开发实践赵飞祥Airwallex(空中云汇)DB架构师
金融级云原生数据库设计与实现孔再华民生银行数据库专家
PixelsDB:云环境下高性价比、多服务等级的serverless查询处理技术实践卞昊穹中国人民大学讲师、PixelsDB项目负责人
数智化时代打造超融合数据库梁敬彬知名企业数据专家
快手降本增效的底层数据库技术支撑尚灿芳快手MySQL内核负责人
分布式 Data Warebase - 构筑 AI 时代数据基石胡月军Protonbase(小质科技)技术VP
PostgreSQL性能改进2、3事章晨曦易景科技联合创始人、首席技术官
内核代码优化实践:基于MySQL 8.0的扩展性改造王斌TCPCopy研发作者,MySQL代码优化专家
MySQL性能优化之纯用户态锁孟祥滨京东科技数据库架构师
平安在数据库技术创新转型中的应用实践汪洋平安科技总工程师
数据库的多维度探讨与实践王辉华夏银行数据库专家
百度云原生数据库GaiaDB极致成本与复杂查询加速技术实践邱学达百度云原生数据库负责人
得到APP向量数据库的场景化落地实践郭富城得到APP算法研发工程师
构建企业级AI知识库在ebay的实践朱冠胜eBay资深架构师
面向云边端协同的新型分布式数据库管理系统王宏志哈尔滨工业大学计算学部长聘教授、博士生导师
百度大规模商业实时报表存储底座BaikalDB的实践于正泉百度BaikalDB报表负责人
快手分布式 KV 存储底座的演进陈星快手存储技术专家
解析云上实时数仓的挑战与应对吴炳锡Databend Labs联合创始人
京东物流面向多源联邦查询场景下的探索实践林恩伟京东物流高级数据开发工程师
快手大数据成本治理体系及实践揣龙快手数据平台/数据管治组/资源成本负责人
抖音集团指标管理与消费体系建设实践施检军抖音集团数据平台数据BP专家
去哪儿大数据成本治理王玉峰去哪儿网大数据技术总监
保险行业数据治理与数据资产:从策略到实践胡赵勇海保人寿架构师
探索近实时湖仓在同程旅行场景实践吴祥平同程旅行数据中心计算集群研发组技术负责人
爱奇艺数据中台湖仓一体化应用实践杜益凡爱奇艺研究员
数据库的AI适用场景与业财一体化的实践分享薛晓刚欧冶云商首席数据库专家
游戏业务数据库的管理优化之道杨建荣竞技世界数据负责人
向量库在职业教育领域的实践张国裕高顿教育技术总监
Oracle 23ai:JSON关系二元性视图与属性图尹海文Oracle ACE-
百度向量数据库创新和应用实践分享朱洁百度数据库部门产品总架构师
信创数据库数字化运维臧強磊南京基石数据技术有限责任公司智能运维平台知识图谱项目负责人
数据库统一操作管理平台程勇树安信息CTO
快手低代码及智能化大数据开发平台实践韩江快手大数据生产平台负责人
数据安全的攻与防,数据泄露了有DBA什么事张文精狮桥融资租赁(中国)有限公司DBA 总监
智能数据管理:AI 驱动的 DataOps 实践代立冬白鲸开源联合创始人
抖音集团DataOps能力演进及建设实践谢林萍抖音集团数据BP专家
百度智能云大容量KV数据库PegaDB的设计与实践商雄百度PegaDB 研发负责人
货拉拉⼤数据KV NoSQL数据库建设实践章啸货拉拉⼤数据基础架构存储⽅向负责⼈/⼤数据专家
数据驱动变革:电商用户及行为数据大平台策略邵锋eBay资深架构师
方正证券基于StarRocks的用户画像系统实践陈晓燕方正证劵数据中台技术负责人
车联网大数据平台建设袁兆国长城汽车车联网大数据技术主管
大数据处理技术进展袁平鹏华中科技大学教授、博士生导师、计算机学会高级会员
美团MTSQL核心特性王广友美团MTSQL内核研发核心成员
移动云海山数据库由云向算演进之路于巍移动云-苏州研发中心数据库技术委员会主任,数据库资深架构师
vivo 分布式缓存探索与实践汪翔vivo专家工程师

以上为大会最新主题,更多主题敬请期待…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值