Redian新闻
>
MyBatis引起的线程池线程打满问题排查过程

MyBatis引起的线程池线程打满问题排查过程

公众号新闻

点击上方“芋道源码”,选择“设为星标

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

 
来源:juejin.cn/post/
7152379508354449439

背景

我们有个业务服务长期没有进行过上线,但是服务器监控经常会发生报警,提示 cpu 使用率 100% 影响线上生产。偶发的现象,所以一开始没注意,后续经过排查才发现原来是踩中了一个“坑”。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

排查过程

1、首先排除了新业务上线的问题

2、其次通过服务器的监控排除了硬件故障的问题

3、于是使用 java 线程分析工具,分析了导致 cpu 过高的都是哪些线程

发现异常线程

排查就会发现 mybatis 执行的相关线程。

4、于是我们根据提示找到相应的源码处进行分析。mybatis 组装 sql 语句这里,这段代码,在 sql 很长的并且入参很多说的时候,下面对 sql 的拼接,将#{属性名}替换成?是很耗费 cpu 的。

MyBatis拼接大SQL耗费性能

5、那么导致这个问题的原因是什么呢?我们针对 mapper 里的 sql 语句发现,有个查询条件入参是个 list,mapper 是这么写:

foreach

6、为了验证问题,我们自己做了一个测试,通过入参条件的调整,来进行执行时间的监控验证,最后经过反复的测试发现「当入参 list 的数量达到 10 万级别的时候,cpu 就飙升到了 120%,执行了 29s,是造成线程等待的元凶」

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

总结

「在使用 list 做 mapper 入参,一定要考虑上限」

另外,sql 的 in 里面的数据也太多了吧,sql 太长超过 max_allow_packet 会报错的。这个 MySQL 配置,建议不要往大了改!



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。

谢谢支持哟 (*^__^*)

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
不想追着娃喂饭,这1招要赶快学!有平底锅就能做,这搭配我能打满分为《万里归途》打满分的外交官,讲述真实撤侨遇险时刻有意思周报 | 男子烧死自家小孩,却归罪《怪奇物语》小11;穿内衣逛环球,万圣节cos引众怒已成功移植全球首例3D生物打印耳朵!3D Bio Therapeutics引领3D生物打印技术突发!曼哈顿公寓楼突发三级大火! 致使38人受伤!又是这个原因引起的....连明星都在吐槽的洛杉矶物价!到底有多夸张?!喝不起的奶茶!住不起的豪宅!专访“MySQL 之父”:我曾创造 MySQL,也将颠覆 MySQL莉莉萝丝戴普一句「我不是靠爸族!」引起的争议「低调超模」罕见开呛:你大不了可以回豪宅里哭【北京1112】免费活动!「视频直播+推文」双重曝光!超有趣的线上相亲活动「陌上看看」等你报名!龙卷风健康快递 203笑死,我坐在NFT线下店里,逛起了它的线上店铺bāo huā shēng?bō huā shēng?我家自用一年的线上围棋课,我又薅来了今年的最大羊毛佩妮和沫沫都令人佩服看了我的 mybatis-plus 用法,全公司同事开始悄悄模仿了。。意大利和丹麦的零散片MybatisPlus 使用 saveOrUpdate() 方法踩坑记录(慎用)爆火的线上酒馆,成本五千、月入八万?丹麦现代场地走了走。线上踩坑记:项目中一次OOM的分析定位排查过程!【京沪免费活动】「视频直播+推文」!双重流量曝光!超有趣的线上相亲活动「陌上看看」等你报名!3000元的线下练字班,输给了69元的视频线程池中线程抛了异常,该如何处理?Kitchener的黑白键故事今年申请美高的线上面试需要提前注册zoom账号吗?美高录取后第二年是否可以申请助学金?| FS问答精选Mybatis 框架下 SQL 注入审计分析源码学习之MyBatis的底层查询原理Linux 内核参数引起的 K8s 集群血案反垄断审查过关!3000亿家电巨头入主这家A股公司一行log日志,引发了P1的线上事故【香港1113】欢乐剧本杀:喜欢你的线索有迹可循即将抵达柏(bǎi)林站 | 2022武汉4号线柏林电影周推荐展映片单公布造影剂引起的唾液腺炎:冠状动脉造影中被遗忘的并发症最后一天|紧急返团!新东方最火爆的线下英语课被1:1搬到线上了!记一次 JVM CPU 使用率飙高问题的排查过程
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。