当前位置:   article > 正文

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

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
  • 1
  • 2
  • 3

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

  • nginx.conf
worker_rlimit_nofile 65535;
   
events { 
    worker_connections 20480;
} 
  • 1
  • 2
  • 3
  • 4
  • 5

4.3 重启 Nginx

  • nginx配置变更需要重启生效
  • 文件描述符修改后需要退出当前shell重新进入才生效
systemctl restart nginx
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/660204
推荐阅读
相关标签
  

闽ICP备14008679号