Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
MySQL连接hang住问题分析_创想鸟

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

linux

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/556620.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
宝可梦日2025:神秘的Pokémon Presents直播活动即将揭晓,Switch 2与新作成焦点
上一篇 2025年11月9日 22:50:23
PHP 代码安全:如何确保应用程序免受黑客攻击?
下一篇 2025年11月9日 22:50:25

相关推荐

  • mysql如何配置连接超时

    MySQL连接超时由wait_timeout、interactive_timeout和connect_timeout参数控制,分别设置空闲连接存活时间、交互式连接超时时间和连接响应超时;通过配置文件或动态命令调整参数值,并结合应用层连接池管理、及时关闭连接及异常处理机制协同优化,避免资源浪费。 My…

    2026年9月20日
    800
  • 如何在mysql中排查连接超时问题

    首先检查MySQL的wait_timeout、interactive_timeout和max_connections参数设置是否合理,确保服务端超时时间与客户端连接池配置匹配;接着排查客户端连接池是否启用连接有效性检测和合理设置空闲超时;然后分析网络稳定性及防火墙或中间设备的TCP超时限制;最后结合…

    2026年9月12日
    200
  • 如何在mysql中升级连接管理策略

    优化MySQL连接管理需调整max_connections、wait_timeout等参数,启用Thread Pool插件减少线程开销,结合应用层连接池如HikariCP或ProxySQL实现连接复用,同时加强安全监控,通过host_cache、防火墙和performance_schema提升系统稳…

    2026年9月11日
    100
  • 如何在mysql中优化连接数配置提高并发

    合理配置MySQL连接数需调整max_connections、启用连接池与持久连接、优化线程缓存及监控连接使用,避免资源耗尽。 MySQL连接数配置直接影响系统的并发处理能力。连接数过少会导致请求排队甚至拒绝服务,过多则可能耗尽内存或引发性能下降。合理优化连接数需从全局配置、应用设计和资源监控三方面…

    2026年9月11日
    100
  • Sublime结合JDBC配置MySQL连接示例_适用于Java服务端数据库访问逻辑

    Sublime结合JDBC配置MySQL连接示例_适用于Java服务端数据库访问逻辑Sublime结合JDBC配置MySQL连接示例_适用于Java服务端数据库访问逻辑Sublime结合JDBC配置MySQL连接示例_适用于Java服务端数据库访问逻辑Sublime结合JDBC配置MySQL连接示例_适用于Java服务端数据库访问逻辑

    使用sublime text写java连接mysql的关键在于配置jdbc驱动和编写正确代码。1. 下载mysql jdbc驱动(mysql-connector-java-x.x.x.jar);2. 将jar文件加入类路径,编译运行时用-cp参数指定;3. 编写代码加载驱动class.forname…

    2026年9月8日 用户投稿
    100
  • Servlet找不到MySQL驱动?如何解决Tomcat加载驱动问题?

    Tomcat环境下Servlet无法加载MySQL驱动程序的解决方案 在使用Servlet连接MySQL数据库时,如果遇到“找不到MySQL驱动程序”的错误,通常是因为Tomcat缺少必要的JAR包。 根据错误信息,可以推断: Servlet运行时抛出异常,提示找不到MySQL驱动类com.mysq…

    2026年9月5日
    100
  • RuoYi框架代码生成器如何适配SQL Server数据库?

    RuoYi-SQLServer 代码生成器适配:从 MySQL 到 SQL Server 的迁移 ruoyi框架的sqlserver版本(ruoyi-sqlserver)原本只支持mysql数据库的代码自动生成功能,现在需要将其扩展到sql server。这篇文章将探讨如何修改代码,实现sql se…

    用户投稿 2026年8月28日
    200
  • 如何用Swoole实现数据库连接池?

    需要数据库连接池是因为它能减少频繁创建和销毁数据库连接的性能开销。1) 数据库连接池预先创建连接供复用,2) 提高系统响应速度和稳定性,3) 降低数据库服务器负担。 在探索如何用Swoole实现数据库连接池之前,让我们先来回答一个关键问题:为什么需要数据库连接池? 数据库连接池的存在是为了解决频繁创…

    2026年8月26日
    000
  • js数据库如何进行数据迁移

    JavaScript数据库迁移是一个多步骤过程,需要谨慎操作以确保数据完整性。以下步骤概述了如何执行此操作: 1. 数据库选择与架构设计: 首先,选择适合项目需求的数据库(例如MySQL、PostgreSQL、MongoDB或SQLite)。 然后,仔细设计数据库架构,包括数据类型、关系和约束。 对…

    2025年12月19日
    000
  • c++如何使用数据库连接池_c++提升数据库应用性能

    数据库连接池通过复用预创建的连接提升C++应用性能。1. 它避免频繁创建销毁连接,降低开销;2. 使用Poco等库可实现连接池,如Poco Data支持MySQL、PostgreSQL;3. 关键参数包括最小/最大连接数、超时时间,合理配置可提升并发能力与稳定性。 在C++开发中,直接为每个数据库操…

    2025年12月19日
    000
  • c++怎么使用数据库连接池_c++数据库连接池使用方法

    使用C++数据库连接池可提升性能和资源利用率,通过复用连接避免频繁创建销毁的开销。推荐使用SOCI或基于MySQL Connector/C++封装连接池。示例中实现了一个线程安全的连接池类,包含连接获取与归还、初始化与释放、有效性管理等功能,结合std::mutex保证并发安全,使用时需注意连接检查…

    2025年12月19日
    000
  • C语言网络编程中数据库连接的优化措施问答

    优化措施:使用连接池预创建数据库连接,避免连接/断开开销。优化查询语句,只查询必要字段,避免通配符或子查询。使用批处理将多个操作组合成一个请求,减少网络开销。尽量使用乐观的锁定机制,减少锁定粒度。考虑使用无服务器数据库,由供应商管理数据库,减少开销。 C语言网络编程中数据库连接的优化措施 在C语言网…

    2025年12月18日
    000
  • Go语言与MySQL:高效存储二进制IP地址到BINARY字段

    在使用go语言的`go-sql-driver/mysql`驱动程序将二进制ip地址(如`net.ip`或`[]byte`)存储到mysql的`binary(4)`字段时,直接传递这些类型常会导致错误。本教程将详细介绍如何通过将`[]byte`类型的ip地址显式转换为`string`类型来解决这一问题…

    2025年12月16日
    000
  • Go database/sql 事务与连接管理深度解析

    本文深入探讨go语言`database/sql`包在使用事务时常见的“too many connections”错误及不当的事务提交方式。通过解析`sql.db`连接池的工作原理和事务(`sql.tx`)的正确生命周期管理,文章将提供一套规范的数据库操作实践,包括正确的事务提交方法、连接复用策略和连…

    2025年12月16日
    000
  • Go语言中正确使用导入包结构体作为类型的方法

    本文详细阐述了在go语言中如何正确地引用和使用从外部包导入的结构体作为类型。当尝试将导入包中的结构体(如`database/sql`包的`db`)用作函数参数时,必须使用完整的包名进行限定,以避免“未定义”错误,确保代码的编译与运行。 Go语言包引用机制概述 在Go语言中,代码被组织成包(packa…

    2025年12月16日
    000
  • Go语言 database/sql 包:如何高效查询并处理多个数据库字段

    本文详细介绍了在go语言中使用`database/sql`包和`go-sql-driver/mysql`驱动时,如何从sql查询中获取并处理多个数据库字段。核心在于正确修改sql查询语句的`select`子句以包含所有目标字段,并相应地调整`rows.scan()`方法的参数列表,确保变量顺序与查询…

    2025年12月16日
    000
  • Go语言后端迁移:并行任务处理与数据库集成策略

    本文为将Java后端应用迁移至Go语言提供了专业指导。文章深入分析了Go在处理并行任务方面的强大能力,特别是goroutine和os/exec包的应用。同时,也坦诚地探讨了Go语言在早期阶段可能面临的挑战,包括语言本身的演进、垃圾回收机制的成熟度以及MySQL数据库核心支持的现状。旨在为计划迁移的开…

    2025年12月15日
    000
  • 从Java到Go:后端服务迁移的考量与实践建议

    本文探讨了将Java后端服务迁移至Go语言的实用建议。针对从Java背景转向Go的开发者,文章分析了Go在并行处理、命令行执行方面的优势,并深入剖析了当前Go语言在稳定性、垃圾回收机制以及核心数据库支持方面的潜在挑战。文中提供了Go语言实现并发任务和数据库交互的示例代码,旨在帮助开发者全面评估Go的…

    2025年12月15日
    000
  • Golang数据库操作指南_go连接MySQL实战

    Golang数据库操作指南_go连接MySQL实战Golang数据库操作指南_go连接MySQL实战Golang数据库操作指南_go连接MySQL实战Golang数据库操作指南_go连接MySQL实战

    golang连接mysql需使用database/sql包及驱动。1.安装推荐的mysql驱动github.com/go-sql-driver/mysql;2.通过sql.open创建连接池并用db.ping测试连接;3.查询时使用rows.scan读取数据并确保关闭rows;4.更新操作使用db.…

    2025年12月15日 用户投稿
    200
  • 在Go编程中,如何正确管理Mysql和Redis的连接与释放资源?

    Go语言中MySQL和Redis连接资源的有效管理 在Go语言开发中,尤其是在处理数据库(如MySQL)和缓存(如Redis)时,高效管理连接资源至关重要。本文将探讨如何正确地初始化、使用以及释放MySQL和Redis连接,避免资源泄漏。 首先,我们来看一下常见的资源管理误区。许多开发者习惯于在程序…

    2025年12月15日
    100

发表回复

登录后才能评论
关注微信