Maison base de données tutoriel mysql MySQL连接hang住问题分析

MySQL连接hang住问题分析

Jun 07, 2016 pm 05:28 PM
mysql连接

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

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment connecter Navicat pour MySQL à une base de données MySQL locale - Comment connecter Navicat pour MySQL à une base de données MySQL locale Comment connecter Navicat pour MySQL à une base de données MySQL locale - Comment connecter Navicat pour MySQL à une base de données MySQL locale Mar 04, 2024 pm 07:30 PM

L'article qui vous est présenté dans ce chapitre concerne le logiciel NavicatforMySQL. Savez-vous comment NavicatforMySQL se connecte à la base de données MySQL locale. Ensuite, l'éditeur vous propose la méthode de NavicatforMySQL pour se connecter à la base de données MySQL locale. Regarde. Ouvrez l'ordinateur sur lequel Navicatformysql a été installé, puis cliquez sur l'option "Connecter" dans le coin supérieur droit. Dans la fenêtre contextuelle de nouvelle connexion, vous pouvez saisir le nom de connexion et définir le nom d'hôte sur la base de données locale, donc simplement. utilisez "localhost", laissez simplement le mot de passe vide. Ensuite, si la connexion à la base de données appropriée réussit,

Comment résoudre le problème de connexion Mysql lente dans Docker Comment résoudre le problème de connexion Mysql lente dans Docker Feb 19, 2024 pm 03:09 PM

Après avoir utilisé Docker pour déployer MySQL, la vitesse de connexion est lente Grâce à des recherches en ligne, j'ai découvert que le problème pouvait être dû au manque de modules tels que la résolution DNS lors de l'installation minimale du conteneur. Par conséquent, il y aura un problème de connexion super lente lors de la connexion. Nous ajoutons directement cette phrase skip-name-resolve et modifions directement la configuration docker-compose.yml La configuration est la version suivante : "3" services : mysql : image. : mysql : latestcontainer_name : mysql_composerestart : toujoursports :-3306 :3306commande :--default-a

Analyse de l'impact du numéro de connexion MySQL sur les performances de la base de données Analyse de l'impact du numéro de connexion MySQL sur les performances de la base de données Mar 16, 2024 am 10:09 AM

Analyse de l'impact du numéro de connexion MySQL sur les performances des bases de données Avec le développement continu des applications Internet, les bases de données sont devenues un outil important de stockage et de gestion des données pour prendre en charge les systèmes d'application. Dans le système de base de données, le nombre de connexions est un concept important, directement lié aux performances et à la stabilité du système de base de données. Cet article partira du point de vue de la base de données MySQL, explorera l'impact du nombre de connexions sur les performances de la base de données et l'analysera à travers des exemples de code spécifiques. 1. Quel est le nombre de connexions ? Le nombre de connexions fait référence au nombre de connexions client prises en charge par le système de base de données en même temps. Il peut également être géré.

Optimiser les performances de haute concurrence des connexions MySQL dans les programmes Python Optimiser les performances de haute concurrence des connexions MySQL dans les programmes Python Jun 30, 2023 pm 12:27 PM

Comment optimiser les performances de haute concurrence des connexions MySQL dans un programme Python ? Résumé : MySQL est une base de données relationnelle dotée de performances puissantes, mais en cas de concurrence élevée, les opérations de connexion et de requête des programmes Python peuvent affecter les performances du système. Cet article présentera quelques techniques d'optimisation pour améliorer les performances des programmes Python et des bases de données MySQL. Utiliser le pool de connexions : dans les situations de concurrence élevée, la création et la fermeture fréquentes de connexions à la base de données consommeront beaucoup de ressources système. Par conséquent, l’utilisation du pooling de connexions peut réduire efficacement

Comment tester les performances de haute concurrence des connexions MySQL en ligne de commande ? Comment tester les performances de haute concurrence des connexions MySQL en ligne de commande ? Jun 30, 2023 pm 07:25 PM

Comment tester les performances de haute concurrence des connexions MySQL depuis la ligne de commande ? Avec la popularisation continue des applications Internet, les performances de simultanéité élevées des bases de données sont devenues l'un des points centraux de nombreuses demandes. En tant que base de données open source populaire, MySQL a également reçu une grande attention pour ses performances de simultanéité élevées. Avant de tester les performances de haute concurrence des connexions MySQL, nous devons clarifier certains concepts et préparations : Connexions simultanées : font référence à plusieurs clients établissant des connexions avec la base de données en même temps, et ces connexions effectuent des opérations de base de données en même temps. Limite de connexion : MySQ

Comment gérer la perte de données après la fin anormale de la connexion MySQL ? Comment gérer la perte de données après la fin anormale de la connexion MySQL ? Jun 29, 2023 am 11:36 AM

Comment gérer la perte de données après la fin anormale de la connexion MySQL ? Lors de l'utilisation de la base de données MySQL, la connexion à la base de données sera parfois interrompue anormalement pour diverses raisons. Cela entraînera non seulement l'interruption de l'opération en cours, mais peut également entraîner la perte des données soumises. Afin de résoudre ce problème, nous devons prendre certaines mesures pour gérer la perte de données après une interruption anormale de la connexion MySQL. Tout d'abord, nous devons être clairs : MySQL est une base de données prenant en charge les transactions. Une transaction est un ensemble d'opérations, soit toutes soumises, soit soumises.

La connexion MySQL est réinitialisée, comment y faire face ? La connexion MySQL est réinitialisée, comment y faire face ? Jul 01, 2023 pm 12:13 PM

La connexion MySQL est réinitialisée, comment y faire face ? MySQL est un système de gestion de bases de données relationnelles couramment utilisé dans des projets de différentes tailles. Cependant, lors de l'utilisation de MySQL, la connexion est parfois réinitialisée, ce qui peut causer des problèmes à notre projet. Cet article explique pourquoi la connexion MySQL est réinitialisée et comment résoudre ce problème. La connexion en cours de réinitialisation est généralement causée par les raisons suivantes : 1. Problème de réseau : lorsque la connexion réseau entre le client et le serveur connecté à MySQL est instable,

La connexion MySQL est réinitialisée, comment garantir la santé du pool de connexions via le maintien de la connexion ? La connexion MySQL est réinitialisée, comment garantir la santé du pool de connexions via le maintien de la connexion ? Jun 29, 2023 am 11:26 AM

La connexion MySQL est réinitialisée, comment garantir la santé du pool de connexions via le maintien de la connexion ? Lors de l'utilisation de la base de données MySQL, vous rencontrez souvent des situations où la connexion est réinitialisée, provoquant une interruption de la connexion à la base de données, ce qui est très peu fiable pour l'application. Afin de résoudre ce problème, vous pouvez garantir la santé du pool de connexions en maintenant la connexion active. Le maintien de la connexion signifie l'envoi d'une instruction de requête spécifique lorsque la connexion est inactive pour maintenir la connexion active et empêcher la connexion d'être activement fermée par le serveur. Cette instruction de requête spécifique peut être un simple SE

See all articles