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

高并發(fā)下 MySQL Statement Cancellation Timer 的線程數(shù)暴漲

數(shù)據(jù)庫 MySQL
線上業(yè)務(wù)高峰期 CPU 飆升,抓取 thread dump 發(fā)現(xiàn) MySQL Statement Cancellation Timer 的線程數(shù)比較多,接收到線上預(yù)警,分析一下原因。

問題描述

線上業(yè)務(wù)高峰期 CPU 飆升,抓取 thread dump 發(fā)現(xiàn) MySQL Statement Cancellation Timer 的線程數(shù)比較多,接收到線上預(yù)警,分析一下原因。業(yè)務(wù)高峰:

圖片圖片

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

依賴信息:

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

環(huán)境配置信息

  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();
}

發(fā)生過程分析

  1. 找到該線程的創(chuàng)建的地方 NativeSession

圖片圖片

  1. 引用關(guān)系如下

圖片圖片

  1. 什么時候啟動 enableQueryTimeouts = true

圖片圖片

  1. 默認值是 true

圖片圖片

  1. startQueryTime 的調(diào)用方 StatementImpl 的 executeQuery

圖片圖片

  1. 可以發(fā)現(xiàn) timeOutInMillis 不為 0 的情況下,并且 enableQueryTimeouts = true 就會創(chuàng)建 CanalQueryTask 然后如果超時就會自動調(diào)度

方法調(diào)用如下: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調(diào)用的是 setQueryTimeOut 方法,然后傳給 timeOutInMills

圖片圖片

如果需要取消 CancelQueryTask 需要將 validationQueryTimeout 設(shè)置為 0

  1. 并且去掉 mybatis defalutStatemnetTimeOut 參數(shù)

圖片圖片

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

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

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

圖片圖片

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

圖片圖片

復(fù)現(xiàn)和修復(fù)

測試代碼

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

修復(fù)效果

現(xiàn)象 MySQL Statement Cancellation Timer的線程不再產(chǎn)生

圖片圖片

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
責(zé)任編輯:武曉燕 來源: 運維開發(fā)故事
相關(guān)推薦

2014-08-08 13:30:44

Nginx

2013-01-30 10:12:24

NginxNginx優(yōu)化高并發(fā)

2024-11-26 07:29:57

高并發(fā)線程安全

2025-02-20 00:01:00

2019-10-30 16:54:08

golangredis數(shù)據(jù)庫

2022-06-12 06:45:26

高并發(fā)防重

2023-02-03 15:16:42

SpringHystrix

2025-02-26 08:20:18

2020-07-15 08:14:12

高并發(fā)

2017-11-27 08:50:29

架構(gòu)數(shù)據(jù)存儲

2019-11-08 08:40:29

Java高并發(fā)流量

2025-03-21 06:20:00

連接池系統(tǒng)數(shù)據(jù)庫

2021-03-28 09:45:05

冪等性接口數(shù)據(jù)

2021-07-01 06:58:12

高并發(fā)訂單號SCM

2020-09-23 22:36:27

分布式架構(gòu)系統(tǒng)

2023-06-25 08:05:09

MySQL事務(wù)并發(fā)

2021-07-29 08:13:05

高并發(fā)秒殺商品秒殺系統(tǒng)

2019-03-18 05:02:30

高并發(fā)京東架構(gòu)

2024-02-02 11:24:00

I/O高并發(fā)場景

2021-01-15 05:12:14

Java并發(fā)樂觀鎖
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 激情欧美一区二区三区中文字幕 | 亚洲一区自拍 | 四虎成人免费电影 | 亚洲精品日韩一区二区电影 | 黄色精品视频网站 | 一级免费视频 | 九九热在线视频 | 天天爽夜夜爽精品视频婷婷 | 97色在线观看免费视频 | 在线播放国产一区二区三区 | 久久成人人人人精品欧 | 天堂在线中文 | 日本精a在线观看 | 亚洲日韩欧美一区二区在线 | 国产精品精品久久久 | 一区二区三区视频在线 | 日韩精品久久久久 | 欧美久久免费观看 | 日韩电影一区二区三区 | 久久夜夜 | 久久久久国产精品 | 第四色播日韩第一页 | 国产高清视频在线观看播放 | 国产电影一区二区在线观看 | av一级| 国产精品一区二区久久 | 日韩精品一二三 | www.久久| 亚洲九九 | 99久久久久 | 亚洲一区在线播放 | 96国产精品久久久久aⅴ四区 | 久久精品一区 | 国产精品人人做人人爽 | 福利网站在线观看 | 日韩av一区二区在线观看 | 天天操天天天 | 三级国产三级在线 | 成人免费大片黄在线播放 | 国产精品激情小视频 | 日韩成人一区 |