Heim Datenbank MySQL-Tutorial 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

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verbinden Sie Navicat für MySQL mit einer lokalen MySQL-Datenbank - So verbinden Sie Navicat für MySQL mit einer lokalen MySQL-Datenbank So verbinden Sie Navicat für MySQL mit einer lokalen MySQL-Datenbank - So verbinden Sie Navicat für MySQL mit einer lokalen MySQL-Datenbank Mar 04, 2024 pm 07:30 PM

Der Artikel in diesem Kapitel befasst sich mit der NavicatforMySQL-Software. Wissen Sie, wie NavicatforMySQL eine Verbindung zur lokalen MySQL-Datenbank herstellt? Schau mal. Öffnen Sie den Computer, auf dem Navicatformysql installiert wurde, und klicken Sie dann auf die Option „Verbinden“ in der oberen rechten Ecke. Im Popup-Fenster für neue Verbindungen können Sie den Verbindungsnamen eingeben und den Hostnamen auf die lokale Datenbank festlegen Verwenden Sie „localhost“. Lassen Sie das Passwort einfach leer. Wenn dann die Verbindung zur praktischen Datenbank erfolgreich ist,

So lösen Sie das Problem der langsamen MySQL-Verbindung in Docker So lösen Sie das Problem der langsamen MySQL-Verbindung in Docker Feb 19, 2024 pm 03:09 PM

Nachdem ich Docker zum Bereitstellen von MySQL verwendet habe, ist die Verbindungsgeschwindigkeit langsam. Durch Online-Suchen habe ich herausgefunden, dass das Problem möglicherweise durch das Fehlen von Modulen wie der DNS-Auflösung während der minimalen Containerinstallation verursacht wird. Daher tritt beim Herstellen einer Verbindung ein Problem mit einer sehr langsamen Verbindung auf. Wir fügen diesen Satz „skip-name-resolve“ direkt hinzu und ändern die Konfiguration von „docker-compose.yml“ wie folgt: Version: „3“ -Dienste: mysql: image : mysql: Latestcontainer_name: mysql_composerestart: Alwaysports:-3306:3306command:--default-a

Optimierung der hohen Parallelitätsleistung von MySQL-Verbindungen in Python-Programmen Optimierung der hohen Parallelitätsleistung von MySQL-Verbindungen in Python-Programmen Jun 30, 2023 pm 12:27 PM

Wie kann die hohe Parallelitätsleistung von MySQL-Verbindungen in einem Python-Programm optimiert werden? Zusammenfassung: MySQL ist eine relationale Datenbank mit hoher Leistung. Bei hoher Parallelität können jedoch die Verbindungs- und Abfragevorgänge von Python-Programmen die Leistung des Systems beeinträchtigen. In diesem Artikel werden einige Optimierungstechniken vorgestellt, um die Leistung von Python-Programmen und MySQL-Datenbanken zu verbessern. Verbindungspool verwenden: In Situationen mit hoher Parallelität verbraucht das häufige Erstellen und Schließen von Datenbankverbindungen viele Systemressourcen. Daher kann die Verwendung von Verbindungspooling effektiv reduziert werden

Analyse des Einflusses der MySQL-Verbindungsnummer auf die Datenbankleistung Analyse des Einflusses der MySQL-Verbindungsnummer auf die Datenbankleistung Mar 16, 2024 am 10:09 AM

Analyse des Einflusses der MySQL-Verbindungsnummer auf die Datenbankleistung Mit der kontinuierlichen Entwicklung von Internetanwendungen sind Datenbanken zu einem wichtigen Datenspeicher- und Verwaltungstool zur Unterstützung von Anwendungssystemen geworden. Im Datenbanksystem ist die Anzahl der Verbindungen ein wichtiges Konzept, das in direktem Zusammenhang mit der Leistung und Stabilität des Datenbanksystems steht. Dieser Artikel beginnt aus der Perspektive der MySQL-Datenbank, untersucht die Auswirkungen der Anzahl von Verbindungen auf die Datenbankleistung und analysiert sie anhand spezifischer Codebeispiele. 1. Wie viele Verbindungen gibt es? Die Anzahl der Verbindungen bezieht sich auf die Anzahl der Client-Verbindungen, die das Datenbanksystem gleichzeitig unterstützt. Es kann auch verwaltet werden

Wie gehe ich mit Datenverlust um, nachdem die MySQL-Verbindung abnormal beendet wurde? Wie gehe ich mit Datenverlust um, nachdem die MySQL-Verbindung abnormal beendet wurde? Jun 29, 2023 am 11:36 AM

Wie gehe ich mit Datenverlust um, nachdem die MySQL-Verbindung abnormal beendet wurde? Bei Verwendung der MySQL-Datenbank kommt es manchmal aus verschiedenen Gründen zu einem abnormalen Abbruch der Datenbankverbindung. Dies führt nicht nur zu einer Unterbrechung des aktuellen Vorgangs, sondern kann auch zum Verlust der übermittelten Daten führen. Um dieses Problem zu lösen, müssen wir einige Maßnahmen ergreifen, um den Datenverlust zu bewältigen, nachdem die MySQL-Verbindung abnormal beendet wurde. Zunächst müssen wir klarstellen: MySQL ist eine Datenbank mit Transaktionsunterstützung. Eine Transaktion ist eine Reihe von Vorgängen, die entweder alle übermittelt werden.

Die MySQL-Verbindung wird zurückgesetzt. Wie kann der Zustand des Verbindungspools durch Verbindungs-Keep-Alive sichergestellt werden? Die MySQL-Verbindung wird zurückgesetzt. Wie kann der Zustand des Verbindungspools durch Verbindungs-Keep-Alive sichergestellt werden? Jun 29, 2023 am 11:26 AM

Die MySQL-Verbindung wird zurückgesetzt. Wie kann der Zustand des Verbindungspools durch Verbindungs-Keep-Alive sichergestellt werden? Bei der Verwendung der MySQL-Datenbank kommt es häufig zu Situationen, in denen die Verbindung zurückgesetzt wird, was zu einer Unterbrechung der Datenbankverbindung führt, was für die Anwendung sehr unzuverlässig ist. Um dieses Problem zu lösen, können Sie den Zustand des Verbindungspools sicherstellen, indem Sie die Verbindung am Leben halten. Unter Verbindungs-Keep-Alive versteht man das Senden einer bestimmten Abfrageanweisung, wenn die Verbindung inaktiv ist, um die Verbindung aktiv zu halten und zu verhindern, dass die Verbindung vom Server aktiv geschlossen wird. Diese spezifische Abfrageanweisung kann eine einfache SE sein

Wie kann die Konfiguration der Java-Umgebungsvariablen wirksam werden? Wie kann die Konfiguration der Java-Umgebungsvariablen wirksam werden? Feb 19, 2024 pm 08:34 PM

Wie kann die Konfiguration der Java-Umgebungsvariablen wirksam werden? Bei der Java-Entwicklung ist die korrekte Konfiguration von Java-Umgebungsvariablen ein sehr wichtiger Schritt. Durch die korrekte Konfiguration von Java-Umgebungsvariablen kann sichergestellt werden, dass Ihre Anwendung reibungslos läuft und viele potenzielle Probleme vermieden werden. Dieser Artikel enthält einige Schritte und Beispielcode, die Ihnen bei der korrekten Konfiguration von Java-Umgebungsvariablen helfen. Öffnen Sie zunächst das Fenster „Systemeigenschaften“ Ihres Betriebssystems. Verschiedene Betriebssysteme haben unterschiedliche Öffnungsmethoden. Im Folgenden sind die Öffnungsmethoden einiger gängiger Systeme aufgeführt: In Wind

Wie teste ich die Update-Leistung einer MySQL-Verbindung über die Befehlszeile? Wie teste ich die Update-Leistung einer MySQL-Verbindung über die Befehlszeile? Jun 29, 2023 am 08:36 AM

Wie teste ich die Update-Leistung einer MySQL-Verbindung über die Befehlszeile? Beim Durchführen von Leistungstests der MySQL-Datenbank ist es häufig erforderlich, die Verbindungs- und Aktualisierungsleistung der Datenbank zu testen. In diesem Artikel wird erläutert, wie Sie mithilfe von Befehlszeilentools Aktualisierungsleistungstests für MySQL-Verbindungen durchführen. Stellen Sie zunächst sicher, dass Sie MySQL und das MySQL-Befehlszeilentool installiert haben. Schritt 1: Erstellen Sie eine Testdatenbank und -tabelle. Geben Sie in der Befehlszeile den folgenden Befehl ein, um eine neue Testdatenbank und -tabelle zu erstellen: mysql-uroot-pCREATE

See all articles