데이터 베이스 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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

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 방법을 제공합니다. 구경하다. Navicatformysql이 설치된 컴퓨터를 열고 오른쪽 상단에 있는 "연결" 옵션을 클릭하면 팝업되는 새 연결 창에서 연결 이름을 입력하고 호스트 이름을 로컬 데이터베이스로 설정하면 됩니다. "localhost"를 사용하세요. 비밀번호를 비워두세요. 그러면 편리한 데이터베이스에 연결이 성공하면,

Docker에서 느린 MySQL 연결 문제를 해결하는 방법 Docker에서 느린 MySQL 연결 문제를 해결하는 방법 Feb 19, 2024 pm 03:09 PM

Docker를 사용하여 MySQL을 배포한 후 연결 속도가 느려지는 현상이 발생했습니다. 온라인 검색을 통해 최소 컨테이너 설치 중 DNS 확인 등의 모듈이 부족하여 문제가 발생할 수 있음을 발견했습니다. 따라서 연결 시 연결 속도가 매우 느려지는 문제가 발생합니다. 이 문장을 직접 추가하고 docker-compose.yml 구성을 직접 수정합니다. 버전은 "3" services:mysql:image 입니다. :mysql:latestcontainer_name:mysql_composerestart: Alwaysports:-3306:3306명령:--default-a

Python 프로그램에서 MySQL 연결의 높은 동시성 성능 최적화 Python 프로그램에서 MySQL 연결의 높은 동시성 성능 최적화 Jun 30, 2023 pm 12:27 PM

Python 프로그램에서 MySQL 연결의 높은 동시성 성능을 최적화하는 방법은 무엇입니까? 개요: MySQL은 강력한 성능을 지닌 관계형 데이터베이스이지만 동시성이 높은 경우 Python 프로그램의 연결 및 쿼리 작업이 시스템 성능에 영향을 미칠 수 있습니다. 이 기사에서는 Python 프로그램과 MySQL 데이터베이스의 성능을 향상시키는 몇 가지 최적화 기술을 소개합니다. 연결 풀 사용: 동시성이 높은 상황에서 데이터베이스 연결을 자주 만들고 닫으면 많은 시스템 리소스가 소모됩니다. 따라서 연결 풀링을 사용하면 효과적으로

MySQL 연결 수가 데이터베이스 성능에 미치는 영향 분석 MySQL 연결 수가 데이터베이스 성능에 미치는 영향 분석 Mar 16, 2024 am 10:09 AM

MySQL 연결 수가 데이터베이스 성능에 미치는 영향 분석 인터넷 애플리케이션의 지속적인 개발로 인해 데이터베이스는 애플리케이션 시스템을 지원하는 중요한 데이터 저장 및 관리 도구가 되었습니다. 데이터베이스 시스템에서 연결 수는 데이터베이스 시스템의 성능 및 안정성과 직결되는 중요한 개념이다. 이 기사에서는 MySQL 데이터베이스의 관점에서 시작하여 연결 수가 데이터베이스 성능에 미치는 영향을 살펴보고 특정 코드 예제를 통해 분석합니다. 1. 연결 수는 얼마나 됩니까? 연결 수는 데이터베이스 시스템이 동시에 지원하는 클라이언트 연결 수를 의미하며 관리할 수도 있습니다.

MySQL 연결이 비정상적으로 종료된 후 데이터 손실을 처리하는 방법은 무엇입니까? MySQL 연결이 비정상적으로 종료된 후 데이터 손실을 처리하는 방법은 무엇입니까? Jun 29, 2023 am 11:36 AM

MySQL 연결이 비정상적으로 종료된 후 데이터 손실을 처리하는 방법은 무엇입니까? MySQL 데이터베이스를 사용할 때 여러 가지 이유로 인해 데이터베이스 연결이 비정상적으로 종료되는 경우가 있습니다. 이로 인해 현재 작업이 중단될 뿐만 아니라 제출된 데이터가 손실될 수도 있습니다. 이 문제를 해결하기 위해서는 MySQL 연결이 비정상적으로 종료된 후 데이터 손실에 대처하기 위한 몇 가지 조치가 필요합니다. 먼저, MySQL은 트랜잭션을 지원하는 데이터베이스라는 점을 분명히 해야 합니다. 트랜잭션은 모두 제출된 작업 집합입니다.

MySQL 연결이 재설정되었습니다. 연결 유지를 통해 연결 풀의 상태를 확인하는 방법은 무엇입니까? MySQL 연결이 재설정되었습니다. 연결 유지를 통해 연결 풀의 상태를 확인하는 방법은 무엇입니까? Jun 29, 2023 am 11:26 AM

MySQL 연결이 재설정되었습니다. 연결 유지를 통해 연결 풀의 상태를 확인하는 방법은 무엇입니까? MySQL 데이터베이스를 사용할 때 연결이 재설정되어 데이터베이스 연결이 중단되는 상황이 자주 발생하며 이는 애플리케이션에 매우 불안정합니다. 이 문제를 해결하려면 연결을 활성 상태로 유지하여 연결 풀의 상태를 확인할 수 있습니다. 연결 유지는 연결이 유휴 상태일 때 특정 쿼리 문을 보내 연결을 활성 상태로 유지하고 서버가 연결을 적극적으로 닫는 것을 방지하는 것을 의미합니다. 이 특정 쿼리 문은 간단한 SE가 될 수 있습니다.

Java 환경 변수 구성을 적용하는 방법은 무엇입니까? Java 환경 변수 구성을 적용하는 방법은 무엇입니까? Feb 19, 2024 pm 08:34 PM

Java 환경 변수 구성을 적용하는 방법은 무엇입니까? Java 개발에서는 Java 환경 변수를 올바르게 구성하는 것이 매우 중요한 단계입니다. Java 환경 변수를 올바르게 구성하면 애플리케이션이 원활하게 실행되고 많은 잠재적인 문제를 피할 수 있습니다. 이 기사에서는 Java 환경 변수를 올바르게 구성하는 데 도움이 되는 몇 가지 단계와 샘플 코드를 제공합니다. 먼저 운영 체제의 시스템 속성 창을 엽니다. 운영 체제마다 열기 방법이 다릅니다. 다음은 몇 가지 일반적인 시스템 열기 방법입니다.

명령줄에서 MySQL 연결의 업데이트 성능을 테스트하는 방법은 무엇입니까? 명령줄에서 MySQL 연결의 업데이트 성능을 테스트하는 방법은 무엇입니까? Jun 29, 2023 am 08:36 AM

명령줄에서 MySQL 연결의 업데이트 성능을 테스트하는 방법은 무엇입니까? MySQL 데이터베이스의 성능 테스트를 수행할 때 데이터베이스의 연결 및 업데이트 성능을 테스트해야 하는 경우가 많습니다. 이 기사에서는 명령줄 도구를 사용하여 MySQL 연결의 업데이트 성능 테스트를 수행하는 방법을 소개합니다. 먼저 MySQL과 MySQL 명령줄 도구가 설치되어 있는지 확인하세요. 1단계: 테스트 데이터베이스 및 테이블 생성 명령줄에 mysql-uroot-pCREATE 명령을 입력하여 새 테스트 데이터베이스 및 테이블을 생성합니다.

See all articles