成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

高并發下 MySQL Statement Cancellation Timer 的線程數暴漲

數據庫 MySQL
線上業務高峰期 CPU 飆升,抓取 thread dump 發現 MySQL Statement Cancellation Timer 的線程數比較多,接收到線上預警,分析一下原因。

問題描述

線上業務高峰期 CPU 飆升,抓取 thread dump 發現 MySQL Statement Cancellation Timer 的線程數比較多,接收到線上預警,分析一下原因。業務高峰:

圖片圖片

下面是一些可能相關的信息( mysql 驅動,db 連接池,orm 框架)

依賴信息:

  1. mysql-jdbc 8.0.24
  2. druid 1.2.8
  3. mybatis 3.4.6

環境配置信息

  1. druid 配置,全部都是默認值
  2. mybatis 配置:
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
    SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
    factory.setVfs(SpringBootVFS.class);
    factory.setDataSource(dataSource);
    //todo 省略其他配置
    Configuration c = new Configuration();
    c.setLogImpl(StdOutImpl.class);
    c.setDefaultStatementTimeout(25000);
    factory.setConfiguration(c);

    return factory.getObject();
}

發生過程分析

  1. 找到該線程的創建的地方 NativeSession

圖片圖片

  1. 引用關系如下

圖片圖片

  1. 什么時候啟動 enableQueryTimeouts = true

圖片圖片

  1. 默認值是 true

圖片圖片

  1. startQueryTime 的調用方 StatementImpl 的 executeQuery

圖片圖片

  1. 可以發現 timeOutInMillis 不為 0 的情況下,并且 enableQueryTimeouts = true 就會創建 CanalQueryTask 然后如果超時就會自動調度

方法調用如下:com.mysql.cj.CancelQueryTaskImpl#run

圖片圖片

處理方案

  1. 項目使用的是使用 alibaba druid

圖片圖片

參考:https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8調用的是 setQueryTimeOut 方法,然后傳給 timeOutInMills

圖片圖片

如果需要取消 CancelQueryTask 需要將 validationQueryTimeout 設置為 0

  1. 并且去掉 mybatis defalutStatemnetTimeOut 參數

圖片圖片

  1. 如果這些都去掉可以通過 mysql  服務端 collection timeout 配置處理

mysql 服務器會有一個參數 wait_timeout:mysql server 關閉連接之前,允許連接閑置多少秒。默認是 28800,單位秒,即 8 個小時。

# 分別查看全局、會話變量值
show global VARIABLES like '%timeout%';
show  VARIABLES like '%timeout%';

圖片圖片

  • druid 可以通過 testOnBorrow 和 testOnReturn、testWhileIdle分別在鏈接獲取,鏈接歸還的時候判斷是否有效。

圖片圖片

復現和修復

測試代碼

  • PushCallbackService.java
  • CallbackLog.java
  • DBTimerController.java
  • MccClient.java

修復效果

現象 MySQL Statement Cancellation Timer的線程不再產生

圖片圖片

thread dump 分析工具地址:https://fastthread.io/

參考資料

  • https://segmentfault.com/a/1190000020162800
  • https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_wait_timeout
責任編輯:武曉燕 來源: 運維開發故事
相關推薦

2014-08-08 13:30:44

Nginx

2013-01-30 10:12:24

NginxNginx優化高并發

2024-11-26 07:29:57

高并發線程安全

2025-02-20 00:01:00

2019-10-30 16:54:08

golangredis數據庫

2022-06-12 06:45:26

高并發防重

2023-02-03 15:16:42

SpringHystrix

2020-07-15 08:14:12

高并發

2017-11-27 08:50:29

架構數據存儲

2025-02-26 08:20:18

2019-11-08 08:40:29

Java高并發流量

2025-03-21 06:20:00

連接池系統數據庫

2021-03-28 09:45:05

冪等性接口數據

2021-07-01 06:58:12

高并發訂單號SCM

2020-09-23 22:36:27

分布式架構系統

2023-06-25 08:05:09

MySQL事務并發

2021-07-29 08:13:05

高并發秒殺商品秒殺系統

2019-03-18 05:02:30

高并發京東架構

2024-02-02 11:24:00

I/O高并發場景

2019-02-15 10:11:23

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品视频一区二区三区 | 五月综合激情婷婷 | 欧美黑人一级爽快片淫片高清 | 国产一区二区三区久久久久久久久 | 欧美精品一二三 | 在线天堂免费中文字幕视频 | 美女国产精品 | 精品99在线| 日韩h| 国产精品视频久久久久 | 日日夜夜精品免费视频 | 一级免费看片 | 色又黄又爽网站www久久 | 久久久久久久久久久久久久久久久久久久 | 色综合色综合色综合 | 日韩午夜激情 | 亚洲自拍偷拍视频 | 亚洲高清免费 | 亚洲永久免费观看 | 欧美黄色录像 | 日韩成人一区二区 | 97精品国产97久久久久久免费 | 亚洲天堂999 | 国产精品国产精品国产专区不片 | 日本三级精品 | 欧美不卡一区二区三区 | 正在播放国产精品 | 网黄在线 | 亚洲国产精品成人 | 日韩一区二区三区精品 | 网站黄色av| 亚洲一区二区三区国产 | 亚洲网站在线 | 一级午夜aaa免费看三区 | 欧美成人高清视频 | 在线观看视频中文字幕 | 亚洲国产一区视频 | 一区二区三区国产 | 久久88| 欧美一区二区三区四区视频 | a视频在线观看 |