mysql的问题解决:dial tcp connect: connection reset by peer

本文深入分析了高并发场景下出现connectionresetbypeer错误的原因,主要探讨了TCP连接过程中的SYN队列与ACCEPT队列溢出问题,并提供了增加连接池及调整相关参数的解决方案。

背景

当并发请求高的时候会出现 connection reset by peer 这样的错误,也就是 服务端主动关闭了socket但是客户端依然再用

 

分析

正常的tcp 建立连接的时候

  1. tcp connect 请求进来的时候 服务端 会加入 SYN队列
  2. 当三次握手成功之后,会从 SYN队列移动到ACCEPT队列
  3. 然后应用层通过accept 方法接受新的socket

 

结论

  1. 如果是dial tcp的过程中出错 ,很可能就是 accept队列满了,并且在参数 net.ipv4.tcp_abort_on_overflow  =1 的情况下  会立马发送RST信号给client
  2. 当然也有很多别的原因会导致connection reset by peer, 比如 mysql的wait_timeout过低,mysql服务端会主动关闭连接等等

可以通过以下命令来查看,第一种情况的问题

sysctl -a |grep tcp_max_syn_backlog
sysctl -a |grep somaxconn
sysctl -a |grep tcp_abort
netstat -s | grep -i listen

[root@iZ23w6heibjZ ~]# sysctl -a |grep tcp_max_syn_backlog

net.ipv4.tcp_max_syn_backlog = 1024

[root@iZ23w6heibjZ ~]#  sysctl -a |grep somaxconn

net.core.somaxconn = 128

[root@iZ23w6heibjZ ~]#  sysctl -a |grep tcp_abort

net.ipv4.tcp_abort_on_overflow = 0

[root@iZ23w6heibjZ ~]#  netstat -s | grep -i  listen

    21361 times the listen queue of a socket overflowed  

    21361 SYNs to LISTEN sockets ignored

[root@iZ23w6heibjZ ~]#

accept队列默认是128,当并发较高的情况下,服务端来不及处理新的连接就会出现问题

 

解决办法

  1. 增加连接池
  2. 增加长连接的生命周期,比如mysql client端的 maxLifetime,可以缓解瞬间批量重连的问题
Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp: lookup jmsdb on 127.0.0.11:53: no such host wait for database jmsdb ready Error: dial tcp: lookup jmsdb on 127.0.0.11:53: no such host wait for database jmsdb ready Error: dial tcp: lookup jmsdb on 127.0.0.11:53: no such host wait for database jmsdb ready Error: dial tcp: lookup jmsdb on 127.0.0.11:53: no such host wait for database jmsdb ready rm: cannot remove '/opt/jumpserver/data': Device or resource busy rm: cannot remove '/opt/koko/data': Device or resource busy rm: cannot remove '/opt/lion/data': Device or resource busy rm: cannot remove '/opt/chen/data': Device or resource busy rm: cannot remove '/var/log/nginx': Device or resource busy >> Init database External database skip start, jmsdb >> Init nginx External redis server skip start, jmsredis Starting periodic command scheduler: cron. Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready Error: dial tcp 172.23.0.3:3309: connect: connection refused wait for database jmsdb ready
09-04
### 解决 `Error: dial tcp 172.23.0.3:3309: connect: connection refused` 错误 - **检查数据库服务状态**:要保证数据库服务在`172.23.0.3`主机上正常运行,并且监听的端口是`3309`。可以在数据库所在主机上使用如下命令检查: ```bash netstat -tuln | grep 3309 ``` 若未看到相应的监听信息,可能是数据库服务未启动或者配置监听的端口不是`3309`。 - **检查防火墙设置**:检查数据库所在主机的防火墙是否允许来自 Docker 容器的连接。可以临时关闭防火墙进行测试: ```bash # 对于 CentOS 系统 systemctl stop firewalld # 对于 Ubuntu 系统 sudo ufw disable ``` 测试完成后,建议重新开启防火墙,并配置相应的规则允许连接。 - **检查网络配置**:确保 Docker 容器和数据库所在主机处于同一网络环境,并且网络连接正常。可以在 Docker 容器内使用`ping`命令测试与数据库主机的连通性: ```bash ping 172.23.0.3 ``` 若无法 ping 通,可能存在网络配置问题,需要检查 Docker 网络设置和主机网络配置。 ### 解决 `Error: dial tcp: lookup jmsdb on 127.0.0.11:53: no such host` 错误 - **检查 DNS 配置**:此错误通常是 DNS 解析问题。可以查看 Docker 容器内的`/etc/resolv.conf`文件,确保其中的 DNS 服务器配置正确。也可以尝试手动指定有效的 DNS 服务器,例如 Google 的公共 DNS(`8.8.8.8`和`8.8.4.4`)。可以通过在运行容器时使用`--dns`选项来指定 DNS 服务器: ```bash docker run --dns 8.8.8.8 --dns 8.8.4.4 your_image ``` - **检查容器网络模式**:确保容器使用的网络模式支持 DNS 解析。默认的`bridge`网络模式通常可以正常工作,但如果使用了自定义网络,需要确保该网络配置正确。 - **检查容器内的 hosts 文件**:可以检查容器内的`/etc/hosts`文件,看是否存在`jmsdb`的正确映射。如果不存在,可以手动添加: ```bash docker exec -it your_container_id bash echo "172.23.0.3 jmsdb" >> /etc/hosts ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值