首页 > 数据库 >mysql数据库cpu高导致微服务假死问题排查解决

mysql数据库cpu高导致微服务假死问题排查解决

时间:2024-03-29 16:57:57浏览次数:35  
标签:java 假死 cpu content configitem mysql com id

今天早上发现如下task微服务假死了没有响应,然后发现如下日志

 

2024-03-29 01:06:17.089 [Thread-152587] ERROR com.alibaba.druid.pool.DruidPooledStatement.errorCheck [370] : CommunicationsException, druid version 1.2.11, jdbcUrl : jdbc:mysql://15.99.72.154:3306/nova?allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=FALSE, testWhileIdle true, idle millis 279301, minIdle 50, poolingCount 4, timeBetweenEvictionRunsMillis 60000, lastValidIdleMillis 279301, driver com.mysql.jdbc.Driver, exceptionSorter com.alibaba.druid.pool.vendor.MySqlExceptionSorter
2024-03-29 01:07:03.957 [Thread-152587] ERROR com.alibaba.druid.pool.DruidDataSource.handleFatalError [1867] : {conn-10396} discard
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 279,208 milliseconds ago. The last packet sent successfully to the server was 279,221 milliseconds ago.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990)

 

 

 

从监控日志发现凌晨1点多的时候154的cpu非常高,把mysql搞崩了

后来继续排查日志发现凌晨1点多的时候有一个定时任务开始启动了,然后里面有个逻辑会执行如下sql语句

 

SELECT a.configitem_id as configlv1,a.content as contentlv1,b.configitem_id as configlv2,b.content as contentlv2,
c.configitem_id as configlv3,c.content as contentlv3,d.configitem_id as configlv4,d.content as contentlv4,
d.flag as flaglv4,e.configitem_id as configlv5,e.content as contentlv5,e.flag as flaglv5,e.PN,e.pulsar_id FROM m_configitem a
LEFT JOIN m_configitem b ON a.configitem_id = b.parent_item
LEFT JOIN m_configitem c ON b.configitem_id = c.parent_item
LEFT JOIN m_configitem d ON c.configitem_id = d.parent_item
LEFT JOIN m_configitem e ON d.configitem_id = e.parent_item
WHERE
a.`level` = 0

 

通过task微服务的日志发现1秒钟内有多个thread同时在执行上面这个sql(因为调用上面这个sql的方法被弄成了异步)

然后用explain发现这个语句会全表扫描,所以破案了

解决方法:

1,先把凌晨一点调用这个sql的方法改成同步方法,减少并发执行这个sql的数量

2,优化表,使得这个表不会进行全表扫描

 

 

 

标签:java,假死,cpu,content,configitem,mysql,com,id
From: https://www.cnblogs.com/xiaohanlin/p/18104157

相关文章

  • Navicat连接本地CentOs7虚拟机中的Mysql数据库
    1、准备工作:虚拟机中安装Mysql不会的可以参考:https://blog.csdn.net/m0_66360096/article/details/1340535172、Navicat新建连接虚拟机IP地址是和Xshell连接一样的:https://www.cnblogs.com/Bernard94/p/18097141账号密码是安装Mysql时默认的,当然也可以自己修改,可以参考上面安......
  • mysql插入大量数据减少IO开销
    前言性能测试时需要模拟生产环境的数据量,在造百万、千万级数据的时候发现直接使用插入sql效率极低,推荐第四种快速的方式插入mysql数据效率对比1.单行插入插入速度很普通,不推荐insertintotableName(colunm1,colunm2,...)value(value1,value2,...);2.多行插入提升不......
  • MySQL存储过程和定时任务
    本文档主要介绍如何利用MySQL存储过程和Event事件结合起来,实现数据的定时处理工作1.创建数据表createtablet1(idint,namevarchar(30))2.创建存储过程 创建存储过程delimiter//CREATEPROCEDURE`insert_t1`()BEGINSETautocommit=0;INSERTINTOt1(id......
  • 【附源码】JAVA计算机毕业设计在线考研刷题系统(springboot+mysql+开题+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,计算机在教育领域的应用日益广泛。特别是在线教育平台,以其便捷性、灵活性和资源共享性受到了广大师生的青睐。近年来,考研热潮......
  • 【附源码】JAVA计算机毕业设计在线考试系统的设计与实现(springboot+mysql+开题+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展和互联网的普及,传统的教育模式正面临着深刻的变革。在线考试系统作为教育信息化进程中的重要一环,正逐渐取代传统的纸质考试方......
  • MYSQL聚合函数
    DDLCREATETABLE`studentid`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULLCOMMENT'创建时间',`username`varchar(20)DEFAULTNULLCOMMENT'用户名',`pwd`varchar(36)DEFAULTNULLCO......
  • MySQL查询语句like_between_and_in
    数据表创建DDLCREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`creatDate`datetimeDEFAULTNULLCOMMENT'创建时间',`userName`varchar(20)DEFAULTNULLCOMMENT'用户名',`pwd`varchar(36)DEFAULTNULL......
  • 【附源码】JAVA计算机毕业设计在线考试答题系统(springboot+mysql+开题+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的迅猛发展,教育信息化已成为现代教育发展的重要趋势。在线考试答题系统作为教育信息化的重要组成部分,能够打破传统考试的时间和空间限......
  • 【附源码】JAVA计算机毕业设计在线考试(springboot+mysql+开题+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,传统的教育模式正在经历深刻的变革。在线教育以其灵活、便捷的特性受到了广大师生的青睐。在线考试作为在线教育的重要组成......
  • 【附源码】JAVA计算机毕业设计在线考试系统(springboot+mysql+开题+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着信息技术的迅猛发展,教育领域正经历着深刻的变革。在线考试系统作为现代教育信息化建设的重要组成部分,已经逐渐成为各级教育机构优化考试流程......