首页 > 系统相关 >Nginx reload重新加载配置文件的异常情况

Nginx reload重新加载配置文件的异常情况

时间:2023-12-29 12:11:31浏览次数:48  
标签:files grep 配置文件 nginx worker reload fd Nginx open

Nginx reload重新加载配置文件的异常情况


背景

临近年底, 很多业务工作量都上来了. 
今天同事告知, nginx的log 里面出现了大量的 too many openfiles 的提示信息.
并且同事明确说明, 已经修改了/etc/secuirty/limits.conf 以及 worker_connections 这两个参数. 
并且已经第一时间执行了reload 的操作. 
理论上不应该再出现这个提示了才对. 
基于这个问题场景, 简单总结一下这次的问题以及简单应对.

结论

nginx -s reload 
其实是一个 soft 的过程. 
他需要等待 nginx 的worker 处理完手工的工作再重新拉起来一个进程进行工作. 
所以有一定的概率会出现 有的worker 一直繁忙, 无法清理已有的链接, 导致一直无法重新加载配置文件.

这里就有两个问题. 加载配置文件 会使用用户的 security的配置进行生效. 
并且使用nginx.conf 里面的新内容
如果一直无法重启进程, 那么大的最大文件打开数是不会发生变化的. 

优雅都是有成本的, 不仅仅是生活, 程序也是如此. 

论据

在 anything is file 的linux 系统中. 
会通过文件的方式记录 运行程序的全部内容. 
/proc/$pid 里面
其中 fd 应该是打开的文件句柄信息
limits 应该是配置限制信息: 
可以通过如下命令进行确认: 
ps -eo lstart,etime,time,cmd |grep nginx
# 查看每个nginx进程的启动时间等信息. 
# 如果看到 worker进程不一致的时间, 可能就是存在一定的问题. 
for i in `ps -ef |grep nginx |grep -v grep |awk '{print $2}'`; do echo $i ; cat /proc/$i/limits |grep "open files"; done
# 查看每个nginx进程的限制信息.  
# 可以看到他的配置情况

如果有几个 worker 进程还处于 reload 之前的时间点启动的
那么很有可能 修改的配置还未生效.  所以建议稳妥起见在非工作时间 还行一下 restart 最好不过. 

关于两个参数-worker_rlimit_nofile

worker_rlimit_nofile
worker_connections

这两个参数是不一样的维度. 
第一个: worker_rlimit_nofile
worker_rlimit_nofile  如果这个参数没有设置
那么默认就去用户的limit限制信息. 

如果这个参数设置了就会覆盖 用户的limit限制, 并且可以可以低 
并且是针对一个worker进程来的. 

可以根据下面的设置明显的看出来
这个只是影响worker的线程信息, 不影响 master的
并且可以脱离nofile系统设置

所以如果没有系统管理员权限的话, 可以作为一个使用点进行优化. 

[root@auto109 fd]# ulimit -n
66666

# 不加参数
[root@auto109 fd]# for i in `ps -ef |grep nginx |grep -v grep |awk '{print $2}'`; do echo $i ; cat /proc/$i/limits |grep "open files"; done
9529
Max open files            66666                66666                files
9530
Max open files            66666                66666                files
[root@auto109 fd]# vim /usr/local/nginx/nginx.conf
[root@auto109 fd]# systemctl restart nginx

# 参数为 102400 
[root@auto109 fd]# for i in `ps -ef |grep nginx |grep -v grep |awk '{print $2}'`; do echo $i ; cat /proc/$i/limits |grep "open files"; done
16515
Max open files            66666                66666                files
16516
Max open files            102400               102400               files

# 修改参数为 1024 
[root@auto109 fd]# vim /usr/local/nginx/nginx.conf
[root@auto109 fd]# systemctl restart nginx
[root@auto109 fd]# for i in `ps -ef |grep nginx |grep -v grep |awk '{print $2}'`; do echo $i ; cat /proc/$i/limits |grep "open files"; done
17209
Max open files            66666                66666                files
17210
Max open files            1024                 1024                 files
[root@auto109 fd]#

关于参数-worker_connections

需要注意 要区分 nginx是作为应用服务器还是作为反向代理服务器. 
http1.1 一个chrome浏览器可以打开 六个tcp链接. 理论上就需要nginx 开启至少6个文件openfile

如果是反向代理可能要乘以 2 

所以应用服务器能够支撑的 在线用户信息可能为:

worker的数量 * min[worker_connections , worker_rlimit_nofile}/12

所以还是需要关注这个参数的.

标签:files,grep,配置文件,nginx,worker,reload,fd,Nginx,open
From: https://www.cnblogs.com/jinanxiaolaohu/p/17934613.html

相关文章

  • linux环境docker安装使用nginx
    1、dockersearchnginx 命令来查看可用版本$dockersearchnginxNAMEDESCRIPTIONSTARSOFFICIALAUTOMATEDnginxOfficialbuildofNginx.3260[OK]......
  • OpenEuler22.03源码编译安装nginx1.24.0
    一、环境说明操作系统版本:OpenEuler22.03SP2LTSNginx版本:1.24.0安装位置:/app/nginxSelinux配置:关闭或设置为permissive二、Nginx安装#安装必要依赖dnf-yinstalltargccmakepcrepcre-develzlibzlib-developensslopenssl-devel#创建nginx安装文件夹mkdir/......
  • .NET 6 控制台程序(Console)读取配置appsettings.json配置文件
    ​ 1、添加引用Microsoft.Extensions.Configuration.Json添加引用 Microsoft.Extensions.Configuration.Json,引用方法可以参考:1)使用Nuget界面管理器搜索"Microsoft.Extensions.Configuration.Json"在列表中分别找到它,点击"安装"相关文档:VS(VisualStudio)中Nuget的使用......
  • Nginx 轻松搞定跨域问题 !
    Nginx轻松搞定跨域问题!当你遇到跨域问题,不要立刻就选择复制去尝试,请详细看完这篇文章再处理,我相信它能帮到你。分析前准备:前端网站地址:http://localhost:8080服务端网址:http://localhost:59200首先保证服务端是没有处理跨域的,其次,先用postman测试服务端接口是正常的 当......
  • nginx WebUI进行反向代理为什么报错504
    当您在使用NginxWebUI进行反向代理时遇到504错误,这通常是由于Nginx无法在合理的时间内完成请求处理。504错误是Nginx的通用错误,表示"网关超时"。以下是可能导致此问题的原因以及相应的解决方案:1.后端服务器问题原因:后端服务器可能由于各种原因无法及时响应。解决方案:检查后端服务......
  • nginx升级演示
    首先查看咱们的nginx版本通过nginx-V下载新的版本,通过这个rz[[email protected]]#tar-zxvfnginx-1.12.0.tar.gz[[email protected]]#cdnginx-1.12.0/配置一下新版本[[email protected]]#./configure--prefix=/usr/local/nginx--us......
  • yum安装的nginx如何安装其他模块
    yum安装nginx没有某一模块,该如何添加第三方模块? 本文将以添加--with-stream模块为例,演示如何去添加新的模块进去。需求:生产有个接口是通过socket通信。nginx1.9开始支持tcp层的转发,通过stream实现的,而socket也是基于tcp通信。实现方法:Centos7.5下yum直接安装的nginx,添加新模......
  • nginx配置正向代理
    #nginxtar包下载地址http://nginx.org/download/先说nginx正向代理配置:server{listen3128;#dnsresolverusedbyforwardproxyingresolver114.114.114.114;#forwardproxyforCONNECTreque......
  • 【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解
    之前我们已经学习的Spring、SpringMVC、Mabatis、Maven,详细讲解了Spring、SpringMVC、Mabatis整合SSM的方案和案例,上一节我们学习了SpringBoot的开发步骤、工程构建方法以及工程的快速启动,从这一节开始,我们开始学习SpringBoot配置文件。接下来,我们逐步开始学习,本教程所有示例均基于......
  • nginx代理 yum 源
    我们在安装centos服务器时,可能会有以下情况:局域网内有若干台服务器,但是只有一台服务器可以连接外网,其余服务器都不可以连接外网,但通过局域网与外网机器联通。那么我们再使用yum安装软件时,可以采用以下方式搭建本地yum源使用nginx代理yum源介绍使用方法2。方......