MySQL连接hang住问题分析
Linux c多线程连接mysql数据库,每次都是短连接,操作完后就释放连接,有时候会出现mysql_real_connect挂住的现象,挂住超时mysql
【问题现象】:
1. Linux c多线程连接mysql数据库,每次都是短连接,操作完后就释放连接,有时候会出现mysql_real_connect挂住的现象
2. 挂住超时mysql_real_connect返回后报错如下:Lostconnection to MySQL server at 'reading initial communication packet', systemerror: 104,返错后线程号没变,会继续往下运行
【初步原因分析】:
1. mysql_real_connect连接数据库, 没有显式调用超时时间,重连什么的,,使用的默认值:
2. 昨天拿c mysqlclient的源码进行了分析测试,发现以下几个配置项的默认值(如果调mysql_real_connect之前没有设置任何属性,mysql client端的机器上/etc/my.cnf也没有配置)如下:
connect_timeout = 0
read_timeout = 0
write_timeout = 0
reconnect = 0 //1表示自动重连
所以这些参数是需要显式设置的。
{net = {vio = 0x7b8f150, options = {connect_timeout = 0, read_timeout = 0, write_timeout = 0,}
3. Mysqlclient中报错的代码如下(与服务端连接建立后,读解析包的时候失败了):
/*
Part 1: Connection established, read and parse first packet
*/
if ((pkt_length=cli_safe_read(mysql)) == packet_error)
{
if (mysql->net.last_errno == CR_SERVER_LOST)
set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
ER(CR_SERVER_LOST_EXTENDED),
"reading initial communication packet",
errno);
fprintf(myfp,"%s after cli_safe_read packet_error \n",cur_time());
goto error;
}
线程阻塞时抓到的堆栈如下:
#0 0x0000003ebe0c5f3b in read () from /lib64/libc.so.6
#1 0x00007f240dd91430 in vio_read () from /usr/lib/libmysql.so.16.0.0
#2 0x00007f240dcf9b05 in my_real_read () from /usr/lib/libmysql.so.16.0.0
#3 0x00007f240dcf9e38 in my_net_read () from /usr/lib/libmysql.so.16.0.0
#4 0x00007f240dcec396 in cli_safe_read () from /usr/lib/libmysql.so.16.0.0
#5 0x00007f240dceea17 in mysql_real_connect () from /usr/lib/libmysql.so.16.0.0

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

本章节为你们带来的文章是关于NavicatforMySQL软件的,你们晓得NavicatforMySQL如何连接本地MySQL数据库吗?接着,小编就为各位带来了NavicatforMySQL连接本地MySQL数据库的方法,感兴趣的用户一同来下文看看吧。进行打开电脑Navicatformysql已经安装好的,然后进行点击右上角的“连接”选项在弹出的新建连接窗口中,您可以输入连接名称,并将主机名设置为本地数据库,因此只需使用“localhost”,密码留空即可。然后方便连接的数据库是否连接成功的话,

使用Docker部署MySQL后,连接速度较慢,通过在线搜索发现问题可能源自最小容器安装时缺少DNS解析等模块。所以连接时会出现连接超慢的问题,我们直接加入这一句skip-name-resolve我们直接修改docker-compose.yml配置,配置如下version:"3"services:mysql:image:mysql:latestcontainer_name:mysql_composerestart:alwaysports:-3306:3306command:--default-a

如何在Python程序中优化MySQL连接的高并发性能?摘要:MySQL是一种性能强大的关系型数据库,但在高并发的情况下,对于Python程序的连接和查询操作可能会影响系统的性能。本文将介绍一些优化技巧,以提高Python程序与MySQL数据库的性能。使用连接池:在高并发的情况下,频繁地创建和关闭数据库连接会消耗大量的系统资源。因此,使用连接池可以有效地减少

MySQL连接数对数据库性能的影响分析随着互联网应用的不断发展,数据库成为了支撑应用系统重要的数据存储和管理工具。在数据库系统中,连接数是一个重要的概念,它直接关系到数据库系统的性能和稳定性。本文将从MySQL数据库的角度出发,探讨连接数对数据库性能的影响,并通过具体的代码示例进行分析。一、连接数是什么?连接数指的是数据库系统同时支持的客户端连接数,也可以理

如何处理MySQL连接异常终止后的数据丢失?在使用MySQL数据库时,有时候由于各种原因,数据库连接会出现异常终止的情况,这不仅会导致当前操作被中断,还可能会导致已经提交的数据丢失。为了解决这个问题,我们需要采取一些措施来处理MySQL连接异常终止后的数据丢失。首先,我们需要明确一点:MySQL是一个具有事务支持的数据库,事务是一组操作的集合,要么全部提交,

怎样使Java环境变量配置生效?在Java开发中,正确配置Java环境变量是非常重要的一步。Java环境变量的正确配置可以确保你的应用程序能够顺利地运行,并且可以避免很多潜在的问题。本文将给出一些步骤和示例代码,帮助你正确地配置Java环境变量。首先,打开你的操作系统的“系统属性”窗口。不同的操作系统有不同的打开方式,下面是一些常见系统的打开方式:在Wind

MySQL连接被重置,如何通过连接保活来确保连接池的健康?在使用MySQL数据库时,经常会遇到连接被重置的情况,造成数据库连接中断,对于应用程序来说是非常不可靠的。为了解决这个问题,可以通过连接保活的方式来确保连接池的健康。连接保活是指在连接空闲状态下发送一个特定的查询语句来保持连接的活跃状态,防止连接被服务器主动关闭。这个特定的查询语句可以是一条简单的SE

如何在命令行中测试MySQL连接的更新性能?在进行MySQL数据库的性能测试时,常常需要测试数据库的连接和更新性能。本文将介绍如何利用命令行工具进行MySQL连接的更新性能测试。首先,确保已经安装了MySQL以及MySQL命令行工具。步骤一:创建测试数据库和表在命令行中输入以下命令创建一个新的测试数据库和表:mysql-uroot-pCREATE
