Nginx reload重新加载配置文件的异常情况
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
所以还是需要关注这个参数的.
Nginx reload重新加载配置文件的异常情况的更多相关文章
- Nginx常用命令(启动/重启/停止/测试配置文件/重新加载配置文件)
Nginx 安装后只有一个程序文件,本身并不提供各种管理程序,它是使用参数和系统信号机制对 Nginx 进程本身进行控制的. Nginx 的参数包括有如下几个: 使用: /usr/local/ngin ...
- Nginx自动加载配置文件方案
nginx自动加载配置文件方案一.nginx+consul+consul-template实现过程:consul作为服务发现软件,consul-template作为nginx配置文件的模板,consu ...
- nginx启动、重启、重新加载配置文件和平滑升级
Nginx有一个主进程和几个工作进程,主进程的主要作用就是读取.评估配置文件和管理工作进程,工作进程对请求做实际处理.工作进程的数量是在配置文件中配置的,一般设置为cpu的核心数*线程数. nginx ...
- Nginx下修改php.ini后重新加载配置文件命令
修改php.ini后 如,我的 php.ini 文件是放在 /etc/php.ini php 所在目录是 /www/Linux/php-5.2.17 修改 php.ini 后要用 php-fpm 来进 ...
- NGINX的启停命令、以及动态加载配置文件的命令
-- 启动(不推荐):在nginx目录下有一个sbin目录,sbin目录下有一个nginx可执行程序../nginx -- 启动(指定配置文件,推荐)/usr/local/nginx/sbin/ngi ...
- linux 上修改了nginx.conf 怎么重新加载配置文件生效
步骤如下先利用/usr/local/nginx/sbin/nginx -t测试配置文件修改是否正常/usr/local/nginx/sbin/nginx -s reload重新加载 nginx 更改配 ...
- []转帖]linux 上修改了nginx.conf 怎么重新加载配置文件生效
linux 上修改了nginx.conf 怎么重新加载配置文件生效 https://www.cnblogs.com/zhuyeshen/ 步骤如下先利用/usr/local/nginx/sbin/ng ...
- nginx-启动|关闭|重新加载配置文件的命令
1.1 进入操作目录 D: cd D:\NginxTest\nginx-1.10.2 1.2 启动指令 nginx -c conf\nginx.conf 1.3 关闭指令 nginx -s stop ...
- linux中为何每次修改完配置文件后都需要重新加载配置文件
1.大家刚接触linux时,可能会有这样的疑问:为什么每次修改完配置文件之后,总是要重新加载配置文件才能生效?或者需要重启后才能生效? 之前听过一个解释是这样子的: "修改了文件内容 ...
- spring加载配置文件
spring加载配置文件 1.把applicationContext.xml直接放在WEB-INF/classes下,spring会采用默认的加载方式2.采用在web.xml中配置ContextLoa ...
随机推荐
- 从零玩转系列之微信支付实战PC端支付微信退款接口搭建 | 技术创作特训营第一期
一.前言 从零玩转系列之微信支付实战PC端支付微信退款接口搭建 | 技术创作特训营第一期 继前文章取消订单接口和查询订单接口此篇为申请退款流程,此篇文章过长我将分几个阶段的文章发布(项目源码都有,小程 ...
- 探索 Linux Namespace:Docker 隔离的神奇背后
在 深入理解 Docker 核心原理:Namespace.Cgroups 和 Rootfs 一文中我们分析了 Docker 是由三大核心技术实现的. 今天就一起分析 Docker 三大核心技术之一的 ...
- 3.CRUD及批量操作
文档的CRUD index 和 create 操作用put(但是如果没有指定id必须用post,指定了id的可以用post,也可以用put) update和创建索引用post 获取用get 删除用de ...
- C语言使用dlfcn动态载入.so动态库
转载:https://mp.weixin.qq.com/s?__biz=Mzk0NDYzNTI1Ng==&mid=2247483722&idx=1&sn=09a9458b012 ...
- Centos7 Zabbix3.2安装(yum)
http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/ #官网下载地址(只包含zabbix的应用包) ftp://47.104.78.123/zabbix/ ...
- MongoDB的CRUD操作(入门)
MongoDB的简单介绍: 1:MongoDB是什么? mongodb是非关系数据库 但是是非关系数据库当中功能最丰富,最像关系数据库的 MongoDB是一个基于分布式文件存储的数据库. 由C++语言 ...
- 元数据管理平台对比预研 Atlas VS Datahub VS Openmetadata
大家好,我是独孤风.元数据管理平台层出不穷,但目前主流的还是Atlas.Datahub.Openmetadata三家,那么我们该如何选择呢? 本文就带大家对比一下.要了解元数据管理平台,先要从架构说起 ...
- 神经网络基础篇:详解导数(Derivatives)
导数 一个函数\(f(a)=3a\),它是一条直线.下面来简单理解下导数.让 看看函数中几个点,假定\(a=2\),那么\(f(a)\)是\(a\)的3倍等于6,也就是说如果\(a=2\),那么函数\ ...
- 云图说丨初识华为云DDoS防护AAD——DDoS攻击防护平台
DDoS攻击是指分布式拒绝服务,是一种网络攻击手法. 本文分享自华为云社区<[云图说]第297期 初识华为云DDoS防护AAD--DDoS攻击防护平台>,作者:阅识风云. DDoS攻击是指 ...
- 网络ping不通,试试这8招
摘要:网络ping不通,该怎么办?本文教你8个大招,轻松找到问题根源. 本文分享自华为云社区<网络ping不通,该怎么办?>,作者:wljslmz. 如下图,PC(192.168.10.1 ...