Nginx-socket() failed (24: Too many open files) while connecting to upstream

一、问题描述

今天使用 IDEA 连接 Apache Doris 的JDBC 的时候 频繁发生中断,报错如下:
Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
推断是网络出现问题没导致 无法收到 数据库服务器的响应,但是通过检查本地电脑到 服务器的 网络链接呢很稳定,并没有发现问题。想到 Doris 的 JDBC 端口是通过 NGINX 转发的 ,于是从排查 NGINX 日志着手,发现如下错误日志:
00:06:20 [alert] 949543#0: *10410607 socket() failed (24: Too many open files) while connecting to upstream, client: 10.xxx.xx.xxx, server: 0.0.0.0:9030, upstream: “192.168.xxx.xxx:9030”, bytes from/to client:0/0, bytes from/to upstream:0/0

二、问题定位

错误日志很明显, Too many open files 导致 socket连接中断,自然数据库连接失败。 Too many open files 是Linux 常见的错误,表示 程序打开的文件数太多(在linux中一切皆文件),当然在这里表示 打开的 socket 连接数。

三、问题分析

引发该 错误的原因是 Nginx 进程 打开的文件数(socket连接)超过了单个进程默认可以打开的句柄数上限。
如下图可以看到当前系统 单个进程默认可以打开的句柄数上限为 1024:

而此时Nginx 文件打开数远大于 1024

四、解决方案

4.1 通过修改系统的文件描述符限制来增加允许打开的文件数

vi /etc/security/limits.conf 
* soft nofile 65536
* hard nofile 65536

4.2 调整Nginx的配置,增加worker_rlimit_nofile参数的值,并适当增加 worker_connections这个参数

  • nginx.conf
worker_rlimit_nofile 65535;
   
events { 
    worker_connections 20480;
} 

4.3 重启 Nginx

  • nginx配置变更需要重启生效
  • 文件描述符修改后需要退出当前shell重新进入才生效
systemctl restart nginx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值