mysql crash定位分析_MySQL实例crash的案例详细分析

【问题描述】

我们生产环境有一组集群的多台MySQL服务器(MySQL 5.6.21),不定期的会crash,但error log中只记录了重启信息,未记录crash时的堆栈:

mysqld_safe Number of processes running now: 0mysqld_safe mysqld restarted

接下来首先排查系统日志/var/log/message文件,crash时没有其他异常信息,也不是OOM导致的。

【排查思路】

由于日志中未记录有价值的信息。为定位crash的原因,首先开启mysql core dump的功能。

下面是开启core dump的步骤:

1、 在my.cnf文件中增加2个配置项

[mysqld]core_file[mysqld_safe]core-file-size=unlimited

2、修改系统参数,配置suid_dumpable

echo 1 >/proc/sys/fs/suid_dumpable

3、重启mysql服务,配置生效

【问题分析】

开启core dump后,服务器再次crash时生成了core file。

用gdb分析生成的core file,可以看到crash时的堆栈信息如下:

f4c0946cc3d6c0b424280632a64c8b27.png

从函数table_esms_by_digest::delete_all_rows可以看出触发crash的是truncate table events_statements_summary_by_digest操作。

我们内部有个DML的分析工具,用来统计数据库每分钟增删改查的访问量。该工具的数据源是events_statements_summary_by_digest表,采集程序会每一分钟采集一次这张表的数据,采集完成后执行truncate操作。

暂停这组集群上DML采集程序后MySQL没有再发生crash。

进一步分析多个core file,发现最终函数的调用都发生在_lf_pinbox_real_free函数上。

结合现场环境,有两处地方值得分析:

1、 内存的不正常值。当打印该变量时,此处变量的地址偏低,不太正常:

(gdb) p pins->pinbox$2 = (LF_PINBOX *) 0x1367208

2、红字部分为pfs逐条释放digest记录的操作,正在释放某行数据时出现错误:

void reset_esms_by_digest(){uint index;if (statements_digest_stat_array == NULL)return;PFS_thread *thread= PFS_thread::get_current_thread();if (unlikely(thread == NULL))return;for (index= 0; index < digest_max; index++){statements_digest_stat_array[index].reset_index(thread);statements_digest_stat_array[index].reset_data();}digest_index= 1;}

猜测有两种可能导致错误:

1、高并发下,对内存访问出现冲突;

2、某个特殊SQL导致,在处理hash时。

在网上搜索类似的问题,有了进一步的进展,基本确定了这个问题是bug导致

如下Mysql的bug report中讲述了类似问题

https://bugs.mysql.com/bug.php?id=73979

更详细的环境描述如下连接中

https://bugs.launchpad.net/percona-server/+bug/1351148

查到5.6.35上的bug fix的修复内容,和我们碰到的情况非常类似。

对比_lf_pinbox_real_free的修改,该部分确实进行很大的调整。

下面是MySQL 5.6.35函数_lf_pinbox_real_free的代码片段:

static void _lf_pinbox_real_free(LF_PINS pins){LF_PINBOX pinbox= pins->pinbox;struct st_match_and_save_arg arg = {pins, pinbox, pins->purgatory};pins->purgatory= NULL;pins->purgatory_count= 0;lf_dynarray_iterate(&pinbox->pinarray,(lf_dynarray_func)match_and_save, &arg);if (arg.old_purgatory){void *last= arg.old_purgatory;while (pnext_node(pinbox, last))last= pnext_node(pinbox, last);pinbox->free_func(arg.old_purgatory, last, pinbox->free_func_arg);}}

下面是MySQL 5.6.21函数的_lf_pinbox_real_free的代码片段

static void _lf_pinbox_real_free(LF_PINS pins){int npins;void list;void **addr= NULL;void first= NULL, last= NULL;LF_PINBOX pinbox= pins->pinbox;npins= pinbox->pins_in_array+1;if (pins->stack_ends_here != NULL){int alloca_size= sizeof(void )LF_PINBOX_PINSnpins;if (available_stack_size(&pinbox, *pins->stack_ends_here) > alloca_size){struct st_harvester hv;addr= (void **) alloca(alloca_size);hv.granary= addr;hv.npins= npins;_lf_dynarray_iterate(&pinbox->pinarray,(lf_dynarray_func)harvest_pins, &hv);npins= hv.granary-addr;if (npins)qsort(addr, npins, sizeof(void *), (qsort_cmp)ptr_cmp);}}

同时观察到出问题的集群有指标异常,QPS不到6000,Threads_connected将近8000。(对比其他高并发的集群,QPS在20000以上,Threads_connected也只有300左右)。

排查应用端的连接方式,了解到其中一个应用有近百台应用服务器,可能同时发起请求,却没有合理的复用连接,维持大量的连接线程增大了bug触发的概率。

Bugs Fixed的描述如下:Miscalculation of memory requirements for qsort operations could result in stack overflow errors in situations with a large number of concurrent server connections. (Bug #73979, Bug #19678930, Bug #23224078)

【解决思路】

我们通过分析crash时的core file文件,找到crash时的触发条件,暂停DML采集程序(truncate table events_statements_summary_by_digest操作)后恢复。

后面了解到这是MySQL的一个bug,在MySQL 5.6.35版本后已修复。这个bug在应用端与数据库建立大量的连接时,更容易触发。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab 读取照片imread,利用matlab读取图像

怎样用matlab读取20张图片并依次展示出来指定路径下 单个文件夹data中所有图像 P .\data\;% 图像文件夹路径 img_path_list dir(strcat(P,*.jpg));%获取该文件夹中所有jpg格式的图像 N length(img_path_list);%获取图像总数量 for j 1:N%逐一读取图像 image_name img_path…

python元素定位input button_python+selenium 定位到元素,无法点击的解决方法

报错selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (234.75, 22). Other element would receive the click: 需要点击的按钮页面显示不了&#xff0c;需要下拉滚动条&#xff0c;能看到按钮了才能点1、尝试下拉一段滚动条&#…

seo和php哪个容易学,php好学吗?和其它语言比哪个好学?

PHP入门是很简单的&#xff0c;比起C语言来bai说简单许多du而且门槛也不高&#xff0c;只要搭建好服务器zhi环境便能轻松编程&#xff0c;代dao码写好就直接在浏览器看到运行结果&#xff0c;不用像C语言那样编译运行至于你所说的“晦涩的数学题”&#xff0c;个人认为对于入门…

mysql入门优化_MySQL数据库:MySQL十大优化技巧详解

本文主要向大家介绍了MySQL数据库的MySQL十大优化技巧详解&#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习MySQL数据库有所帮助。WEB开发者不光要解决程序的效率问题&#xff0c;对数据库的快速访问和相应也是一个大问题。希望本文能对大家掌握MySQL优化技巧有…

java 函数签名,Java签名getAlgorithm()方法

可以使用getAlgorithm()类java.security.Signature中的方法获得签名对象的算法名称。此方法不需要任何参数&#xff0c;它返回签名对象的算法名称。演示此的程序如下所示-示例import java.security.*;import java.util.*;public class Demo {public static void main(String[] …

oel 7.0 安装 mysql 5_在linux上安装PostgreSQL 9.4并启动和关闭数据库

PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES, Version 4.2为基础的对象关系型数据库管理系统(ORDBMS)。POSTGRES开创的许多概念在很久以后才出现在商业数据库中。PostgreSQL是最初伯克利代码的一个开放源码的继承者。它支持大部分SQL标准并且提供了许多其它现代特…

php的控制器,php-模块与控制器

我正在为一个PHP框架(不是,另一个)编写点点滴滴,作为学习的经验,希望将来可用于较小的项目.我已经读了很多书,即现有框架的参考文档.我看到模块一词泛滥成灾,根据我的阅读和以前的经验,模块是一个概念,用于划分相关代码(视图,控制器,模型等).我很好奇,在这种情况下如何看待模块…

mysql5.7 glibcxx_3.4.15_CentOS6.5 缺少 libstdc++.so.6(GLIBCXX_3.4.15)

libstdc-4.8.2-16.el7 下载地址&#xff1a;[rootlocalhost kindit]#[rootlocalhost kindit]# rpm -qa | grep libstdclibstdc-4.4.7-4.el6.i686[rootlocalhost kindit]#[rootlocalhost kindit]#[rootlocalhost kindit]# cd /home/kindit/Packages/packages-centos7[rootlocalh…

php文件夹下所有视频播放,PHP使用glob方法遍历文件夹下所有文件

遍历文件夹下所有文件&#xff0c;一般可以使用opendir 与 readdir 方法来遍历。代码&#xff1a;$path dirname(__FILE__); // __FILE__文件的完整路径和文件名。// echo __FILE__; // F:\wamp\www\php20190214\index.php// echo $path; // F:\wamp\www\php20190214$result …

python模拟浏览器请求的库_基于Python模拟浏览器发送http请求

1.使用 urllib2 实现#! /usr/bin/env python# -*- codingutf-8 -*-import urllib2url"https://www.baidu.com"req_header {"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11&…

owncloud8 php,owncloud-8.2.3

安装依赖Red Hat Enterprise Linux and CentOS 6 still ship with PHP 5.3. ownCloud requires PHP 5.4 or better. There areseveral third-party repositories that supply PHP 5.4, but you must use the Software Collections (SCL) repository to bein compliance with yo…

影响mysql导入效率的参数_extended-insert对mysqldump及导入性能的影响

参数说明&#xff1a;-e, --extended-insert&#xff0c;长INSERT&#xff0c;多row在一起批量INSERT&#xff0c;提高导入效率&#xff0c;和没有开启 -e 的备份导入耗时至少相差3、4倍&#xff0c;默认开启&#xff1b;用--extended-insertfalse关闭。强烈建议开启&#xff0…

mysql数据库表的类型介绍,mysql数据库表的类型介绍

前言之前我们讲了下载安装数据库&#xff0c;还有如何卸载(虽然直接重装系统就好)那么现在让我们来讲讲"""1、数据库与表的剩余操作编码配置、引擎介绍2、数据库字段的操作3、数据库的数据类型4、数据库字段的约束条件"""数据库的配置通过配置文…

mysql 分表后排序_MySQL优化分库分表,为什么要分表,分表以后如何进行排序查询,业务如何设计?...

昨天面试新人的时候&#xff0c;遇到了这么一个问题&#xff0c;按照自己的想法大体聊了一些&#xff0c;但大多是感性的&#xff0c;并没有完整的了解why and how.今天查了一些相关的资料&#xff0c;包括《MySQL性能调优与架构设计》、《高性能Mysql》&#xff0c;慢慢的整体…

php7 提示500错误解决,升级php7出现500错误怎么办

升级php7出现500错误怎么办发布时间&#xff1a;2020-08-24 10:40:45来源&#xff1a;亿速云阅读&#xff1a;69作者&#xff1a;小新小编给大家分享一下升级php7出现500错误怎么办&#xff0c;希望大家阅读完这篇文章后大所收获&#xff0c;下面让我们一起去探讨吧&#xff01…

oracle 怎么 制造崩溃,oracle数据库崩溃

通过幸存oracle文件修复oracle9i数据问&#xff1a;我没有备分oralce,也没有导出数据库&#xff0c;现在操作系统崩溃了&#xff0c;但是oracle目录下的文件很完整&#xff0c;请问如何修复我的表&#xff1f;答:建一个相同的数据库(磁盘目录相同&#xff0c;否则要改init文件&…

flume-ng 入 oracle,flume-ng-sql-source

支持oracleflume-ng-sql-sourceThis project is used for flume-ng to communicate with sql databasesCurrent sql database engines supportedAfter the last update the code has been integrated with hibernate, so all databases supported by this technology should wo…

php 500 yii,yii2.0出现500错误怎么办

1、首先开启web/index.php defined(YII_DEBUG) or define(YII_DEBUG, true); 将此改为true&#xff1b;看下报错的问题&#xff1a;Exception (Invalid Configuration) yii\base\InvalidConfigException with message The directory is notwritable by the Web process: /home/…

监控视图 oracle,Oracle“并行执行”之四——监控视图

摘自《VLDB and Partitioning Guide》1、视图介绍V$PX_BUFFER_ADVICE提供所有并行查询的BUFFER的历史使用情况&#xff0c;以及相关的建议规划。对于并行执行过程中的内存不足等问题&#xff0c;可以查询这个视图以便能够重新配置一下SGA。V$PX_SESSION提供关于并行进程会话、服…

受迫阻尼 matlab 仿真,MATLAB系统仿真报告——有阻尼受迫振动系统

一、 问题描述有阻尼受迫振动的结构及基本原理图一 有阻尼的受迫振动系统图1为有阻尼的受迫振动系统&#xff0c;质量为M&#xff0c;摩擦系数为B&#xff0c; 弹簧倔强系数为K。拉力、摩擦力和弹簧力三都影响质量为M的物体的加速度。如果系统的能量守恒&#xff0c;且振动一旦…