衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

怎樣去解決MyBatis引起的線程池線程打滿問題呢

jf_ro2CN3Fa ? 來源:稀土掘金 ? 作者:樹洞君 ? 2022-10-17 16:24 ? 次閱讀

背景

我們有個業務服務長期沒有進行過上線,但是服務器監控經常會發生報警,提示 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 過高的都是哪些線程

b970de72-4dc0-11ed-a3b6-dac502259ad0.jpg

發現異常線程

排查就會發現 mybatis 執行的相關線程。

4、于是我們根據提示找到相應的源碼處進行分析。mybatis 組裝 sql 語句這里,這段代碼,在 sql 很長的并且入參很多說的時候,下面對 sql 的拼接,將#{屬性名}替換成?是很耗費 cpu 的。

b98368ee-4dc0-11ed-a3b6-dac502259ad0.jpg

MyBatis拼接大SQL耗費性能

5、那么導致這個問題的原因是什么呢?我們針對 mapper 里的 sql 語句發現,有個查詢條件入參是個 list,mapper 是這么寫:

b9ac1a28-4dc0-11ed-a3b6-dac502259ad0.jpg

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 配置,建議不要往大了改!






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2974

    瀏覽量

    105142
  • SQL
    SQL
    +關注

    關注

    1

    文章

    774

    瀏覽量

    44251
  • RBAC
    +關注

    關注

    0

    文章

    44

    瀏覽量

    9989

原文標題:MyBatis引起的線程池線程打滿問題排查過程

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    跨平臺的線程組件--TP組件

    /銷毀代價是很高的。那么我們要怎么設計多線程編程???答案:對于長駐的線程,我們可以創建獨立的線程
    的頭像 發表于 04-06 15:39 ?914次閱讀

    Java中的線程包括哪些

    線程是用來統一管理線程的,在 Java 中創建和銷毀線程都是一件消耗資源的事情,線程可以重復
    的頭像 發表于 10-11 15:33 ?858次閱讀
    Java中的<b class='flag-5'>線程</b><b class='flag-5'>池</b>包括哪些

    為什么會有線程怎樣操作線程

    信號是什么?信號是如何產生的?為什么會有線程怎樣操作線程
    發表于 12-23 07:27

    線程是如何實現的

    線程的概念是什么?線程是如何實現的?
    發表于 02-28 06:20

    基于線程技術集群接入點的應用研究

    本文在深入研究高級線程技術的基礎上,分析、研究了固定線程數目的線程線程數目動態變化的
    發表于 01-22 14:21 ?5次下載

    基于Nacos的簡單動態化線程實現

    本文以Nacos作為服務配置中心,以修改線程核心線程數、最大線程數為例,實現一個簡單的動態化線程
    發表于 01-06 14:14 ?890次閱讀

    線程線程

    線程通常用于服務器應用程序。 每個傳入請求都將分配給線程池中的一個線程,因此可以異步處理請求,而不會占用主線程,也不會延遲后續請求的處理
    的頭像 發表于 02-28 09:53 ?832次閱讀
    多<b class='flag-5'>線程</b>之<b class='flag-5'>線程</b><b class='flag-5'>池</b>

    Java線程核心原理

    看過Java線程源碼的小伙伴都知道,在Java線程池中最核心的類就是ThreadPoolExecutor,
    的頭像 發表于 04-21 10:24 ?908次閱讀

    如何用C++實現一個線程

    C++線程是一種多線程管理模型,把線程分成任務執行和線程調度兩部分。
    發表于 06-08 14:53 ?1836次閱讀
    如何用C++實現一個<b class='flag-5'>線程</b><b class='flag-5'>池</b><b class='flag-5'>呢</b>?

    線程線程怎么釋放

    線程分組看,pool名開頭線程占616條,而且waiting狀態也是616條,這個點就非常可疑了,我斷定就是這個pool開頭線程導致的問題。我們先排查為何這個
    發表于 07-31 10:49 ?2349次閱讀
    <b class='flag-5'>線程</b><b class='flag-5'>池</b>的<b class='flag-5'>線程</b>怎么釋放

    Spring 的線程應用

    我們在日常開發中,經常跟多線程打交道,Spring 為我們提供了一個線程方便我們開發,它就是 ThreadPoolTaskExecutor ,接下來我們就來聊聊 Spring 的線程
    的頭像 發表于 10-13 10:47 ?651次閱讀
    Spring 的<b class='flag-5'>線程</b><b class='flag-5'>池</b>應用

    線程基本概念與原理

    一、線程基本概念與原理 1.1 線程概念及優勢 C++線程簡介
    的頭像 發表于 11-10 10:24 ?578次閱讀

    線程的基本概念

    ? 呃呃,我這么問就很奇怪,因為線程是什么我都沒說,怎么會知道為什么會有線程?所以我打算帶大家去思考一個場景: 當我們的程序中:有一批
    的頭像 發表于 11-10 16:37 ?560次閱讀
    <b class='flag-5'>線程</b><b class='flag-5'>池</b>的基本概念

    線程的創建方式有幾種

    線程是一種用于管理和調度線程的技術,能夠有效地提高系統的性能和資源利用率。它通過預先創建一組線程并維護一個工作隊列,將任務提交給線程
    的頭像 發表于 12-04 16:52 ?934次閱讀

    什么是動態線程?動態線程的簡單實現思路

    因此,動態可監控線程一種針對以上痛點開發的線程管理工具。主要可實現功能有:提供對 Spring 應用內線程
    的頭像 發表于 02-28 10:42 ?722次閱讀
    百家乐官网怎么下注能赢| 百家乐官网最低投注| 平注打百家乐官网的方法| 百家乐官网奥| 百家乐官网庄闲和游戏机| 榆次百家乐官网的玩法技巧和规则| 赌百家乐心里技巧| 网上百家乐赌场娱乐网规则| 大发888官方 df888gfxzylc8| 真人在线百家乐| 百家乐官网现场新全讯网| 网上百家乐官网网| 百家乐必胜下注法| 百家乐娱乐礼金| 百家乐官网的赚钱原理| 澳门百家乐大小| 大发888游戏代充值100| 百家乐官网预测神法| 赌王百家乐官网的玩法技巧和规则| 百家乐凯时娱乐网| 海滨湾国际娱乐城| 百家乐官网赌场论坛在线| 新奥博百家乐娱乐城| 澳门百家乐怎么玩| 金樽百家乐官网的玩法技巧和规则| 天猫百家乐娱乐城| 速博| 百家乐免費游戏| 时时博百家乐官网的玩法技巧和规则 | tt娱乐城官方网站| 正网皇冠开户| 一二博| 牟定县| 澳门百家乐官网指数| 海盐县| 平山县| 百家乐官网注册赠分| 百家乐官网赢赌场百家乐官网 | 现场百家乐官网电话投注| 百家乐官网注码技术打法| 百家乐官网揽法大全|