银河麒麟V10SP1Nginx代理转发故障socket() failed (24: Too many open files)修改操作系统ulimit值解决实战

news2025/1/12 1:57:47

银河麒麟V10SP1Nginx代理转发故障socket() failed (24: Too many open files)修改操作系统ulimit值解决实战

一、事故描述

Nginx转发失败,转发代理服务器宕机!
翻看Nginx日志

/var/log/nginx

在这里插入图片描述
日志大量报错如下:

在这里插入图片描述

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

这个是操作系统的openfiles值没有配置,达到了最大值,解决方法就是要调整操作系统的参数了!

ulimit 值过小,可能导致压力测试遇到瓶颈,比如通过nginx建立tcp长链接时,链接数量受限。需要修改ulimit值,Linux默认为1024。

Linux open files 限制什么?

在 Linux 中,“open files 限制”指的是对每个进程可以同时打开的文件数量的限制,也称为文件描述符限制。这个限制会影响到系统的性能和稳定性,如果设置太低可能会导致某些应用程序无法正常运行。
Linux 系统中的 open files 限制涉及到单个进程和系统总体两个方面:
单个进程的 open files 限制:可以使用 ulimit -n 命令查看当前用户进程可以同时打开的文件数限制。默认情况下,这个限制通常是 1024。要更改单个进程的文件描述符限制,可以使用 ulimit 命令。例如,执行 ulimit -n 10000 可将文件描述符限制设置为 10000,但这种更改通常只对当前会话生效。若要永久更改此限制,可以编辑 /etc/security/limits.conf 文件,添加类似如下的行:myuser hard nofile 10000 ,这将确保用户 myuser 在登录时可以同时打开最多 10000 个文件。其中,“soft nofile”表示软限制,即用户可以自行修改的最大值;“hard nofile”表示硬限制,是系统设定的最大值,软限制应小于等于硬限制。
系统总 open files 限制:通过查看 /proc/sys/fs/file-max 文件可以得知系统所有进程一共可以打开的文件数量。
当程序(特别是高并发或处理大量文件、网络连接的程序)需要打开的文件数量超过限制时,可能会出现“Too many open files”等错误。常见的解决方法是根据实际需求,适当增大文件描述符限制。但需要注意的是,修改这些参数可能会影响系统性能和稳定性,因此需要谨慎操作,并在修改前备份相关文件和数据。

二、解决方法步骤

(1)查看当前操作系统的配置值

ulimit -a

在这里插入图片描述

(2)调整参数

vi /etc/security/limits.conf

补下下面的内容:

# End of file

# open files  (-n)
 * soft nofile 20480
 * hard nofile 20480
 root soft nofile 20480
 root hard nofile 20480
#
# # max user processes   (-u)
 * soft nproc 20480
 * hard nproc 20480
 root soft nproc 20480
 root hard nproc 20480


在这里插入图片描述
关闭当前SSH会话,重新登录
在执行

ulimit -a

在这里插入图片描述
上图的没有配置值:

在这里插入图片描述
下图值已经变了!

(3)重启Nginx服务

systemctl start nginx.service    #启动服务

再观察翻看日志是否还存在socket() failed (24: Too many open files)报错问题解决

/var/log/nginx

在这里插入图片描述
再观察翻看日志是否还存在socket() failed (24: Too many open files)报错问题解决!

当 Nginx 出现socket() failed (24: Too many open files) while connecting to upstream错误时,通常是因为系统设置的可打开文件描述符数量限制过小,导致 Nginx 进程在尝试打开更多文件时遇到了限制。可以通过以下方法来解决:

  1. 修改系统的 ulimit 限制:

    • 直接执行命令ulimit -n 65535,将同一时间最多可开启的文件数修改为 65535,可以根据自身情况适当调整该数值。但此方法只对当前 shell 有效,退出后失效。
    • 若要永久生效,需要修改/etc/security/limits.conf文件,在底部加入以下配置:
    * soft nproc 65535
    * hard nproc 65535
    * soft nofile 65535
    * hard nofile 65535
    

    其中,*代表全局;soft表示软件限制;hard表示硬件限制;nproc是最大进程数;nofile是最大文件打开数。修改后需要重启系统才能生效。

  2. 修改 Nginx 的配置:在 Nginx 的主配置文件(通常是nginx.conf)中加入或修改以下行:

    worker_rlimit_nofile 65535;
    

    然后重新加载 Nginx 配置,使修改生效,例如使用nginx -s reload命令。

worker_rlimit_nofile 参数用于为 Nginx 工作进程改变打开最多文件描述符数目的限制,可在不重启主进程的情况下增加限制。

修改系统文件描述符数量时,应根据实际情况进行调整,过大的数量可能会对系统性能造成影响。同时,还需注意检查 Nginx 上游服务器或相关服务是否存在异常,以确保问题得到彻底解决。如果问题仍然存在,可以进一步查看系统日志和相关指标,以确定是否还有其他潜在的问题。另外,也可以使用lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more命令查看当前系统打开的文件句柄情况,帮助分析是否有其他进程占用了过多的文件描述符。

额外方法
补充nginx的配置

vi /etc/nginx/nginx.conf

worker_rlimit_nofile 65535;

在 Nginx 配置中,worker_rlimit_nofile 65535; 用于指定一个 Nginx 进程可以打开的最多文件描述符数目。这里将其设置为 65535,表示每个 Nginx 进程最多可以同时打开 65535 个文件。

文件描述符是操作系统用于标识和跟踪打开文件或网络连接等资源的一种机制。当 Nginx 作为服务器处理大量并发连接时,它需要打开许多文件或连接,因此需要足够的文件描述符来支持这些操作。

user nginx ; 
worker_processes 8; 
error_log logs/nginx_error.log crit; 
pid logs/nginx.pid; 
worker_rlimit_nofile 65535;  # 配置 worker 进程可以打开的最大描述符数目为 65535

events { 
    use epoll; 
    worker_connections 204800; 
} 

http { 
    include mime.types; 
    default_type application/octet-stream; 
    # 其他 http 相关的配置 
}

配置这个值
Nginx这个值配置也是受限于操作系统的最大值,所以,还是先配置操作系统的比较靠谱!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1888995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sklearn(Python机器学习库)介绍

0 引言 Sklearn (全称 Scikit-Learn)是基于Python 编程语言的免费软件机器学习库。 Scikit-learn主要是用Python编写的,它建立在 NumPy, SciPy, Pandas 和 Matplotlib 之上,里面API 的设计非常好,所有对象的接口简单,很适合新手上路。 Scikit-learn与许多其他Python库很好地…

Zookeeper:Zookeeper集群角色

文章目录 一、Leader选举二、Zookeeper集群角色 一、Leader选举 Serverid:服务器ID;比如有三台服务器,编号越大在选择算法中的权重越大。Zxid:数据ID;服务器中存放的最大数据ID,值越大说明数据越新&#x…

携手共筑爱的桥梁:引导接纳自闭症同学

在孩子的班级中,当自闭症儿童成为我们共同的一员时,作为老师和家长,我们肩负着特别的责任——引导孩子们以开放的心态接纳、善待并关爱他们。 首先,我们要以身作则,展现接纳与尊重。无论是老师还是家长,都…

vue3自定义指令(图文教程)

序: 简单,但是没怎么用,但是小伙伴问了,所以做个教程。 自定义指令我只关心3件事 干啥用的,怎么用的,解决什么痛点怎么全局博文有查阅及参考过以下文章, vue3:自定义指令_vue3自定…

深度学习实战82-新的研究方向:大模型与图模型结合生成大型图模型,大图模型相关挑战和机遇的观点

大家好,我是微学AI,今天给大家介绍一下深度学习实战82-新的研究方向:大模型与图模型结合生成大型图模型,大图模型相关挑战和机遇的观点。随着人工智能的飞速发展,大型模型已成为人工智能领域最新的突破性成就。在图方面,大型模型尚未取得与自然语言处理和计算机视觉等其他…

14-15 为什么我们现在对阅读如此难以接受

写出来感觉很奇怪,但最近我感觉自己失去了阅读能力。长篇文本对我来说尤其具有挑战性。句子很难读完。更别提章节了。章节有很多段落,而段落又由许多句子组成。 啊。 即使在极少数情况下,我读完了一章,下一页上已经有另一章等着…

Next.js 实战 (一):项目搭建指南

前言 时间过得好快,一下就来到2024下半年了。 上半年我为了学习 Nuxt3,从 0 到 1 开发了一个导航网站:Dream Site,目前主要的功能都已完成了,后续有时间再慢慢添加有趣的功能。 下半年开始进攻 Next.js,…

关于 VuePress 的插件

插件就好比第三方功能,例如增加一个阅读进度条、增加光标效果等。VuePress 官网对插件的介绍:插件通常会为 VuePress 添加全局功能。 这里简单介绍几个本站用的插件吧! ‍ ‍ 插件就好比第三方功能,例如增加一个阅读进度条、增…

计算机提示找不到xinput1_3.dll缺失,七个详细不同修复方法

在电脑中下载或许启动运行游戏时候我相信各位都会遇到xinput1_3.dll丢失或许找不到xinput1_3.dll文件问题,当遇到这个问题时候要如何修复呢?今天我就给大家详细讲解一下xinput1_3.dll是什么与xinput1_3.dll作用和丢失原因以及xinput1_3.dll丢失要怎么处理…

嵌入式c语言2——预处理

在c语言中,头部内容,如include与define是不参与编译而直接预先处理的 如include相当于把头文件扩展,define相当于做了替换 c语言大型工程创建时,会有调试版本与发行版本,发行时不希望看到调试部分内容,此时…

【数据分享】国家级旅游休闲街区数据(Excel/Shp格式/免费获取)

之前我们分享过从我国文化和旅游部官网整理的2018-2023年我国50个重点旅游城市星级饭店季度经营状况数据(可查看之前的文章获悉详情)!文化和旅游部官网上也分享有很多与旅游相关的常用数据,我们基于官网发布的名单文件整理得到全国…

汇聚全球智慧 上海打造人工智能“核爆点”和“新风口”

以下文章来源:证券时报 “以共商促共享 以善治促善智”为主题的世界人工智能大会暨人工智能全球治理高级别会议将于7月4日—6日在上海召开。证券时报记者注意到,大会自2018年创办以来已成功举办六届,成为全球人工智能最具影响力的综合性会议。…

浏览器无法联网问题

浏览器无法联网问题 电脑联网正常,但是服务器显示网络出错或者代理服务器拒绝连接,无法使用浏览器 解决方法 打开电脑【设置】→【网络和Internet】 点击【手动设置代理】→【设置】 关闭【使用代理服务器】,并【保存】 打开【自动检测设…

Day9:逆波兰表达式求值150 滑动窗口最大值239 前 K 个高频元素347

题目150. 逆波兰表达式求值 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int evalRPN(vector<string>& tokens) {//使用栈来消除stack<string> st;for(int i0;i<tokens.size();i){if(tokens[i]""||tokens[i]"-"|…

【CUDA】 归约 Reduction

Reduction Reduction算法从一组数值中产生单个数值。这个单个数值可以是所有元素中的总和、最大值、最小值等。 图1展示了一个求和Reduction的例子。 图1 线程层次结构 在Reduction算法中&#xff0c;线程的常见组织方式是为每个元素使用一个线程。下面将展示利用许多不同方…

三菱A系列网络连接

寄存器名 读写 寄存器类型 变量类型 寄存器范围 说明 X##1 R/W BIT I/O离散 0&#xff0d;7FF Input Y##1 R/W BIT I/O离散 0&#xff0d;7FF Output M##1 R/W BIT I/O离散 0&#xff0d;9255 Internal relay B##1 R/W BIT I/O离散 0&#xff0d;3FF Link relay F##1 R/W BIT I…

EPS绘制甘家寨地形图

1、数据准备 &#xff08;1&#xff09;外业采集的数据点&#xff1b; &#xff08;2&#xff09;地形草图 2、软件准备 这里准备的是EPS2021版本的绘图软件&#xff0c;如下&#xff1a; 3、开始绘图 &#xff08;1&#xff09;打开软件&#xff0c;如上图&#xff0c;选择【…

不同行业如何选择适合自己行业的项目管理工具?

在当今的信息化时代&#xff0c;项目管理软件已成为各行各业不可或缺的工具。然而&#xff0c;由于各行业具有不同的特点和需求&#xff0c;因此选择合适的项目管理软件成为了一个重要问题。本文将探讨不同行业在选择项目管理软件时需要考虑的因素&#xff0c;希望能帮助大家更…

8.12 矢量图层面要素单一符号使用十四(标记符号渲染边界)

前言 本章介绍矢量图层线要素单一符号中标记符号渲染边界&#xff08;Outline: Marker line&#xff09;的使用说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 标记符号渲染边界&#xff08;Outline: Marker line&#xff09; Outline系列只画边界&#…

HarmonyOS ArkUi 官网踩坑:单独隐藏导航条无效

环境&#xff1a; 手机&#xff1a;Mate 60 Next版本&#xff1a; NEXT.0.0.26 导航条介绍 导航条官网设计指南 setSpecificSystemBarEnabled 设置实际效果&#xff1a; navigationIndicator&#xff1a;隐藏导航条无效status&#xff1a;会把导航条和状态栏都隐藏 官方…