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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Navicat for MySQL をローカル MySQL データベースに接続する方法 - Navicat for MySQL をローカル MySQL データベースに接続する方法 Navicat for MySQL をローカル MySQL データベースに接続する方法 - Navicat for MySQL をローカル MySQL データベースに接続する方法 Mar 04, 2024 pm 07:30 PM

この章で紹介する記事は NavicatforMySQL ソフトウェアに関するものです。NavicatforMySQL がどのようにローカル MySQL データベースに接続するかご存知ですか? 次に、エディタは、NavicatforMySQL がローカル MySQL データベースに接続する方法を示します。興味のあるユーザーは以下を参照してください。見てください。 Navicatformysql がインストールされているコンピューターを開き、右上隅の「接続」オプションをクリックします。ポップアップの新しい接続ウィンドウで、接続名を入力し、ホスト名をローカル データベースに設定できます。 「localhost」を使用します。パスワードは空白のままにしてください。そして、便利なデータベースへの接続に成功すると、

Docker での MySQL 接続が遅い問題を解決する方法 Docker での MySQL 接続が遅い問題を解決する方法 Feb 19, 2024 pm 03:09 PM

Docker を使用して MySQL をデプロイした後、接続速度が遅くなりましたが、オンラインで検索した結果、最小限のコンテナーのインストール時に DNS 解決などのモジュールが不足していることが問題の原因である可能性があることがわかりました。そのため、接続時に超遅いという問題が発生しますが、この文を直接追加してskip-name-resolveを追加し、docker-compose.ymlの設定を直接変更します。 設定は以下のとおりです version: "3" services: mysql: image : mysql: 最新コンテナ名: mysql_composerestart: alwaysports:-3306:3306command:--default-a

MySQL 接続数がデータベースのパフォーマンスに与える影響の分析 MySQL 接続数がデータベースのパフォーマンスに与える影響の分析 Mar 16, 2024 am 10:09 AM

MySQL 接続数がデータベースのパフォーマンスに与える影響の分析 インターネット アプリケーションの継続的な開発に伴い、データベースはアプリケーション システムをサポートする重要なデータ ストレージおよび管理ツールになりました。データベース システムにおいて、接続数はデータベース システムのパフォーマンスと安定性に直接関係する重要な概念です。この記事では、MySQL データベースの観点から開始し、データベースのパフォーマンスに対する接続数の影響を調査し、特定のコード例を通じて分析します。 1. 接続数はどれくらいですか?接続数とは、データベース システムが同時にサポートするクライアント接続の数を指し、管理することもできます。

Python プログラムでの MySQL 接続の高い同時実行パフォーマンスの最適化 Python プログラムでの MySQL 接続の高い同時実行パフォーマンスの最適化 Jun 30, 2023 pm 12:27 PM

Python プログラムで MySQL 接続の高い同時実行パフォーマンスを最適化するにはどうすればよいですか?要約: MySQL は強力なパフォーマンスを備えたリレーショナル データベースですが、同時実行性が高い場合、Python プログラムの接続およびクエリ操作がシステムのパフォーマンスに影響を与える可能性があります。この記事では、Python プログラムと MySQL データベースのパフォーマンスを向上させるための最適化テクニックをいくつか紹介します。接続プールを使用する: 同時実行性が高い状況では、データベース接続の作成と終了を頻繁に行うと、大量のシステム リソースが消費されます。したがって、接続プーリングを使用すると、効果的に接続を削減できます。

コマンドラインで MySQL 接続の高い同時実行パフォーマンスをテストするにはどうすればよいですか? コマンドラインで MySQL 接続の高い同時実行パフォーマンスをテストするにはどうすればよいですか? Jun 30, 2023 pm 07:25 PM

コマンドラインから MySQL 接続の高い同時実行パフォーマンスをテストするにはどうすればよいですか?インターネット アプリケーションの継続的な普及に伴い、データベースの高い同時実行パフォーマンスが多くの要求の焦点の 1 つになっています。 MySQL は、人気のあるオープン ソース データベースとして、その高い同時実行パフォーマンスでも広く注目されています。 MySQL 接続の高い同時実行パフォーマンスをテストする前に、いくつかの概念と準備を明確にする必要があります。 同時接続: 複数のクライアントが同時にデータベースとの接続を確立することを指し、これらの接続は同時にデータベース操作を実行します。接続制限: MySQ

MySQL 接続が異常終了した後のデータ損失にどう対処するか? MySQL 接続が異常終了した後のデータ損失にどう対処するか? Jun 29, 2023 am 11:36 AM

MySQL 接続が異常終了した後のデータ損失にどう対処するか? MySQL データベースを使用している場合、さまざまな理由によりデータベース接続が異常終了し、現在の操作が中断されるだけでなく、送信されたデータが失われる可能性があります。この問題を解決するには、MySQL 接続が異常終了した後のデータ損失に対処するための何らかの措置を講じる必要があります。まず第一に、明確にする必要があります: MySQL はトランザクションをサポートするデータベースであり、トランザクションは一連の操作であり、すべてが送信されるか、

MySQL 接続がリセットされます。どのように対処すればよいですか? MySQL 接続がリセットされます。どのように対処すればよいですか? Jul 01, 2023 pm 12:13 PM

MySQL 接続がリセットされます。どのように対処すればよいですか? MySQL は、さまざまな規模のプロジェクトで広く使用されている、一般的に使用されるリレーショナル データベース管理システムです。ただし、MySQL を使用すると、接続がリセットされる状況が発生し、プロジェクトに何らかの問題が発生する可能性があります。この記事では、MySQL の接続がリセットされる原因とその対処法を紹介します。接続のリセットは通常、次の理由によって発生します。 1. ネットワークの問題: MySQL に接続されているクライアントとサーバー間のネットワーク接続が不安定な場合、

MySQL 接続がリセットされました。接続キープアライブを通じて接続プールの健全性を確認するにはどうすればよいですか? MySQL 接続がリセットされました。接続キープアライブを通じて接続プールの健全性を確認するにはどうすればよいですか? Jun 29, 2023 am 11:26 AM

MySQL 接続がリセットされました。接続キープアライブを通じて接続プールの健全性を確認するにはどうすればよいですか? MySQL データベースを使用する場合、接続がリセットされてデータベース接続が中断される状況がよく発生しますが、これはアプリケーションにとって非常に信頼性が低くなります。この問題を解決するには、接続を維持して接続プールの健全性を確保します。接続キープアライブとは、接続がアイドル状態のときに特定のクエリ ステートメントを送信して、接続をアクティブに保ち、サーバーによって接続がアクティブに閉じられるのを防ぐことを意味します。この特定のクエリ ステートメントは単純な SE にすることができます。

See all articles