返回顶部
分享到

Nginx报错“Too many open files”的问题解决

nginx 来源:互联网 作者:佚名 发布时间:2025-05-31 07:13:28 人浏览
摘要

1. 调整系统级文件描述符限制 a. 临时生效(重启后失效): 1 ulimit -n 65535 # 设置当前会话的打开文件数限制 b. 永久生效: 编辑/etc/security/limits.conf,末尾添加: 1 2 3 4 * soft nofile 65535 * hard nof

1. 调整系统级文件描述符限制

a. 临时生效(重启后失效):

1

ulimit -n 65535  # 设置当前会话的打开文件数限制

b. 永久生效:

编辑 /etc/security/limits.conf,末尾添加:

1

2

3

4

* soft nofile 65535

* hard nofile 65535

nginx soft nofile 65535  # 如果Nginx以nginx用户运行

nginx hard nofile 65535

保存后退出,重启系统或重新登录会话生效。

2. 调整Nginx配置

编辑Nginx主配置文件(通常为/etc/nginx/nginx.conf):

1

2

3

4

5

6

7

8

9

10

11

# 在全局块添加

worker_rlimit_nofile 65535;  # 设置每个worker进程最大可打开文件数

 

events {

    worker_connections 4096;  # 每个worker允许的并发连接数

    multi_accept on;          # 允许一次性接受多个连接

}

 

http {

    ...

}

  • 关键公式:worker_rlimit_nofile ≥ worker_connections × worker_processes
  • worker_processes 默认为CPU核心数,可通过 auto 自动设置。

3. 检查系统全局文件描述符上限

1

2

3

4

5

6

cat /proc/sys/fs/file-max  # 查看系统全局限制

# 若需临时修改:

sysctl -w fs.file-max=200000

# 永久生效:

echo "fs.file-max=200000" >> /etc/sysctl.conf

sysctl -p

4. 检查Nginx当前打开文件数

1

2

3

4

5

# 获取Nginx主进程PID

ps -ef | grep nginx | grep master

 

# 查看该进程打开的文件数

lsof -p <PID> | wc -l

若接近限制,需进一步优化或排查泄漏。

5. 排查文件描述符泄漏

检查后端应用:确认是否存在未关闭的数据库连接、文件句柄或HTTP连接。

启用Nginx长连接(减少频繁开闭):

1

2

3

4

http {

    keepalive_timeout 60;

    keepalive_requests 100;

}

日志分析:检查是否有异常请求导致资源未释放,如频繁访问50x.html可能需优化错误处理。

6. 重启Nginx生效配置

1

2

nginx -t         # 验证配置语法

systemctl restart nginx  # 根据系统选择重启命令

7. 监控与验证

实时监控文件描述符:

1

watch -n 1 "ls /proc/$(pgrep nginx)/fd | wc -l"

日志跟踪:观察错误是否减少或消失。

补充说明

  • 时间戳异常:日志中时间为2025年,需检查系统时间或日志配置,避免误导问题定位。
  • 容器化环境:若Nginx运行在容器中,需在宿主机和容器内同时调整限制。

通过上述步骤,可有效解决因文件描述符不足导致的Nginx报错问题。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Nginx报错“Too many open files”的问题解决
    1. 调整系统级文件描述符限制 a. 临时生效(重启后失效): 1 ulimit -n 65535 # 设置当前会话的打开文件数限制 b. 永久生效: 编辑/etc/security
  • Nginx设置https和http同时使用同一个端口访问
    以下是一个同时使用 HTTP 和 HTTPS 并通过 8070 端口的配置示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 server { liste
  • Nginx+keepalived配置的实现步骤

    Nginx+keepalived配置的实现步骤
    一、需要的服务 Nginx、keepalived、epel-release -y 二、安装命令 1 2 3 4 5 6 7 yum install -y keepalived #安装nginx以及拓展源 yum install epel-release -y yum ins
  • nginx中重定向的实现
    一、location 1、 location匹配 location匹配的就是后面的URI /wordpress 192.168.100.11/wordpress 2、 location匹配的分类 2.1 精确匹配 location = / 对字符串进行
  • nginx配置多域名共用服务器80端口
    多个域名,比如两个域名,这两个域名其实共用一台服务器(意味着域名解析到同一个IP),一个域名为abc.com(可以是http://abc.com或者www.a
  • nginx upstream六种方式分配介绍
    1 轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2 weight 指定轮询几率,weight和访问
  • Nginx之upstream被动式重试机制的实现
    我们使用Nginx通过反向代理做负载均衡时,如果被代理的其中一个服务发生错误或者超时的时候,通常希望Nginx自动重试其他的服务,从而实
  • Nginx搭建自己的CDN服务器的方法
    nginx安装 1 2 sudo apt update sudo apt install nginx nginx配置文件 /etc/nginx/nginx.conf或/etc/nginx/sites-available/default 设置缓存 在Nginx配置中启用缓存,这样
  • Nginx实现动态封禁IP的步骤
    在日常的生产环境中,网站可能会遭遇恶意请求、DDoS 攻击或其他有害的访问行为。为了应对这些情况,动态封禁 IP 是一项十分重要的安全
  • Nginx HTTP Status 400 –错误的请求问题解决

    Nginx HTTP Status 400 –错误的请求问题解决
    第一:实验故障 今天小编在搭建完Nginx反向代理两个Tomcat站点,实现负载均衡的实验,访问网页内容时,提示如下报错: HTTP Status 400 错误的
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计