首页 > 其他分享 >nofile参数的学习与整理

nofile参数的学习与整理

时间:2024-06-11 12:11:18浏览次数:12  
标签:files 1025 grep nofile nginx 参数 整理 204800

nofile参数的学习与整理


背景

前段时间正好总结了文件描述符泄露的问题. 
最近在客户现场, 也遇到了一个问题. 
其实两个问题都是因为nofile参数限制所引发.

所以总结一下:
nginx 的worker 的连接数是受到到 nofile的限制的. 
虽然那可以通过 修改配置文件和 直接 ulimit -HSn进行修改.
但是真实情况下下 一个进程的限制是很难动态修改的. 
他一般是由启动过程中的环境限制来决定. 
需要说明 -s reload 可能很难进行生效, 必须kill 再restart .  
不然不会生效. 

其实解决方案有多种. 
第一种是启动脚本之前 增加 ulimit -HSn 65536
第二种使用 systemd的服务进行管理 增加 
Restart=always
LimitNOFILE=64000
也可以避免这个问题. 
第三钟就是常用的修改 /etc/security/limits.conf 进行持久化.
但是必须修改完,重新连接linux,再启动,不然可能会无效. 

这里面还一个问题是 ubuntu 不认 * 作为所有用户的设置
这一点在不同操作系统时是不一样的. 

最后还需要说明一定的是
要定期查看 nginx 的errorlog 可以通过errorlog 快速定位问题

参数的理解

unix 的哲学是 anything is file 
每个进程能够打开的file数量就是收到 nofile的限制. 
内核里面其实也有 fs.file-max  来决定整个系统最大的容量.
fs.file-nr  会表示整个系统的 打开文件数. 

linux 延续在 unix对file的描述. 
但是他的作用域是有一定的限制的.

参数作用域

fs.file-max 是整个系统的设置. 
ulimit -a 出来的 nofile 是单个进程的限制. 
/etc/security/limits.conf 里面可以增加用户对单独的用户进行限制. 
简单期间可以使用如下的参数配置.
需要注意 * 代表所有用户. 
注意, 这里面有坑. * 在centos系可以这样设置
但是ubuntu 是不认 * 的话.
soft 会告警.
hard 会直接阻断不让继续创建文件描述符. 

*   soft    memlock         unlimited
*   hard    memlock         unlimited
*   soft    nofile         unlimited
*   hard    nofile         unlimited
*   soft    nproc         unlimited
*   hard    nproc         unlimited

为了环境稳定和安全一般可以进行nginx打开数量的限制
*   soft    memlock         204800
*   hard    memlock         204800
*   soft    nofile         204800
*   hard    nofile         204800
*   soft    nproc         204800
*   hard    nproc         204800

这里面也需要说明. 理论上. java类型的应用. java开启的线程
也会占用文件描述符的资源. 
打开网络连接. 打开前端文件下载等都会占用文件描述符. 

一个出现问题的场景

/etc/security/limits.conf 内的设置会在下一次打开bash 时生效. 
bash 启动服务时 会根据自己的 限制作为母本来进行设置. 
通过nginx 进行验证
第一种启动方式:
ulimit -HSn 1025
./nginx 
然后: 执行命令
for i in `ps -ef |grep nginx |grep -v grep |awk '{print $2}'` ; do cat /proc/${i}/limits |grep files ; done

可以看到结果为:
Max open files            1025                 1025                 files
Max open files            1025                 1025                 files

然后修改一下 配置文件, 但是不重新启动 bash
vim /etc/security/limits.conf 增加配置为 204800 
再起重启服务
Max open files            1025                 1025                 files
Max open files            1025                 1025                 files

通过 su 进行验证
 killall nginx
 ./nginx  -c nginxtest.conf
 for i in `ps -ef |grep nginx |grep -v grep |awk '{print $2}'` ; do cat /proc/${i}/limits |grep files ; done
# 结果为: 
Max open files            1024                 1048576              files
Max open files            1024                 1048576              files
# 切换用户
 su - root
 cd /data/nginx
 killall nginx
./nginx  -c nginxtest.conf
# 结果为:
for i in `ps -ef |grep nginx |grep -v grep |awk '{print $2}'` ; do cat /proc/${i}/limits |grep files ; done
Max open files            204800               204800               files
Max open files            204800               204800               files

新生成的bash 是有效果的. 

查看nginx的文件描述符打开数量

for i in `ps -ef |grep nginx |grep -v grep |awk '{print $2}'` ; do ll /proc/${i}/fd |wc -l ; done
可以通过这个来简单判断 master 和 worker的打开文件数量信息. 
如果超过限制可能会导致nginx出现大量的errorlog.

标签:files,1025,grep,nofile,nginx,参数,整理,204800
From: https://www.cnblogs.com/jinanxiaolaohu/p/18241830

相关文章

  • 面试专区|【39道Vi Vim高频题整理(附答案背诵版)】
    1.请简单描述VI编辑器的使用?VI编辑器是一种模式化的文本编辑器,广泛用于Unix和类Unix操作系统。它最初由BillJoy在1976年为BSDUnix编写。VI的特点是它分为三种主要模式:命令模式、插入模式和末行模式。命令模式:这是VI打开文件后默认进入的模式。在此模式下,您可以使用键盘......
  • 面试专区|【40道Bash Shell高频题整理(附答案背诵版)】
    1.简述如何调试Shell脚本?调试Shell脚本是一个帮助开发者识别和修正脚本中错误的过程。Bash提供了多种方式来调试脚本,其中包括:使用-x选项:通过在运行脚本时使用-x选项,Bash会在执行每一行命令之前打印该命令。这有助于查看脚本的执行流程和变量的值变化。例如,如......
  • 浙大版PTA python程序设计 第四章题目及知识点解析整理
    第四章--1--在循环中continue语句的作用是(结束本次循环)退出循环的当前迭代  √ 带有else子句的循环如果因为执行了break语句而退出的话,会执行else子句的代码。×因为break是跳出整个循环,所以如果循环体内有else子句,且循环是通过break退出的,那么else子句中的代码也不......
  • java发送get请求带参数
    在Java中,你可以使用java.net.HttpURLConnection或者org.apache.http.client.HttpClient来发送GET请求。以下是使用java.net.HttpURLConnection发送带参数的GET请求的示例代码:importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.HttpURLConnecti......
  • OpenCV RotatedRect类中angle参数解析 C++
    0.前言本文主要探讨RotatedRect类angle的实际含义,为后续学者提供一定的参考。1.官方手册RotatedRect其一构造函数如下图(图1-1)所示。在OpenCV图形坐标系中,水平方向向右为x轴正方向,垂直方向向下为y轴正方向,左上角为(0,0)点。center表示矩形的中心坐标,size中包含了矩形的宽度......
  • pytest的数据驱动和参数传递
    4.1参数化介绍常见使用场景:简单注册功能,也就是输入用户名、输入密码、单击注册,而测试数据会有很多个,可以通过测试用例设计技术组织出很多测试数据,例如用户名都是字母,密码也都是字母,或者都是数字,也可是它们的组合,或是边界值长度的测试数据等。这时可以通过参数化技术实现测试数据......
  • 【Java】SpringBoot 实现文件的上传与下载、日志记录、参数校验等(含代码示例)
    ......
  • C++缺省参数、缺省参数的概念、缺省参数的分类、函数重载、函数重载的概念、C++支持函
    文章目录前言一、缺省参数1.缺省参数的概念2.缺省参数的分类二、函数重载1.函数重载的概念2.C++支持函数重载的原理三、引用1.引用的概念2.引用的特性3.常引用4.引用的使用场景5.传值和传引用效率比较6.引用和指针的区别总结前言C++缺省参数、缺省参数......
  • 设置参数
    参数名称和值所有参数名称均不区分大小写。每个参数都采用以下五种类型之一的值:布尔值、字符串、整数、浮点数或枚举(enum)。类型决定了设置参数的语法:布尔值:值可以写为on、off、true、false、yes、no、1)0或其中任何明确的前缀。字符串:通常,将值括在单引号中,并将值中的任......
  • INA128UA/2K5精密仪表放大器芯片中文资料PDF数据手册引脚图产品手册产品参数
    INA128的说明INA128和INA129(INA12x)均为具备出色精度的低功耗通用仪表放大器。这些放大器采用多功能三级运算放大器设计,尺寸小巧,适用于多种应用。即使在高增益(200kHz、G=100)情况下,电流反馈输入电路也可提供宽带宽。可通过单个外部电阻器在1到10,000范围内设置任......