解决系统too many open files

news/2025/1/20 5:58:41/文章来源:https://www.cnblogs.com/hoganhome/p/18239047

.背景

  • nofile不足引起的too many open files故障报警频繁出现

2.文件描述符的定义与功能

  • 文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。
当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。
  • 简单来说,在Linux 系统中,一切都看做是文件,当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符,
文件描述符就是内核为了高效管理已被打开的文件所创建的索引,用来指向被打开的文件,所有执行I/O操作的系统调用都会通过文件描述符。

3.file-max nr_open nofile 参数之间关系

配置参数
级别
配置含义
配置路径
fs.file-max
系统级别
当前系统可打开最大文件描述符的数量
/etc/sysctl.conf
fs.nr_open
进程级别(不可按用户细化配置)
单个进程可打开最大文件描述符的数量
/etc/sysctl.conf
hard nofile
进程级别(可以按照用户细化配置)
单个进程可打开最大文件描述符的数量,
强限制,该值需要始终保持大于等于soft。
/etc/security/limits.conf
soft nofile
进程级别(可以按照用户细化配置)
单个进程可打开最大文件描述符的数量,
软限制,该值需要始终保持小于等于hard。
/etc/security/limits.conf
 
结论:
1、file-max ≥ nr_open ≥ hart nofile ≥ sofe nofile,如果是root用户不受限于file-max,但是
2、nofile 和 fs.nr_open 都是限制的单个进程的最大文件数量。二者区别是/etc/security/limits.conf 中的nofile可以继续按照用户维度进行细化配置,而 fs.nr_open 则只能针对所有用户。
3、nofile soft 需要小于等于nofile hard,
4、内存和nofile存在一定的线性关系,早期内存很小,所以nofile配置1024,现在内存配置都很高,完全足够支持很大量级的打开文件数,倘若系统真的出现瓶颈,首当其冲的也会是其他资源类型,所以为了方便管理,可以将file-max 、nr_open、hard nofile 、soft nofile都配置成一个较高的值,如需调整,也均一起保持相同数值统一调整。
⚠️注意:修改完所有配置之后,只对新启动的进程生效,修改配置之前的进程不生效,需要重启进程才能使用新的配置!!

4.常用命令

4.1.查看nofile
# 查看当前系统的最大打开文件数
$ cat /proc/sys/fs/file-max
1024000
# 查看一个进程最大打开文件数,该文件是只读权限,此值实际来源于/etc/sysctl.conf,如果未定义,则该值默认为1048576, 如果在sysctl.conf重新定义该值并通过sysctl -p生效后,可以通过cat /proc/sys/fs/nr_open查看最新值。
$ cat /proc/sys/fs/nr_open
1048576
# 查看当前系统已经打开的句柄
# 输出三列信息,第一列代表全局已经分配的文件描述符数量,第二列代表已分配未使用的文件描述符,第三列代表系统总的文件描述符的数量。
$ cat /proc/sys/fs/file-nr
2176 0 1024000
#统计进程pid与文件句柄数的关系
$ lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr
# 统计各用户打开句柄数
$ lsof -n|awk '{print $3}'|sort|uniq -c|sort -nr
# 统计各命令打开句柄数
$ lsof -n|awk '{print $1}'|sort|uniq -c|sort -nr
4.2.修改nofile
# 永久设置file-max和nr_open,sysctl.conf需要root权限才能修改。
$ sudo -i
$ vim /etc/sysctl.conf
fs.file-max = 1024000
fs.nr_open= 1024000
$ sysctl -p
# 永久设置soft ,hard nofile
# *代表所有用户,也可以针对其他普通用户做配置
$ vim /etc/security/limits.conf
* soft nofile 1024000
* hard nofile 1024000
# 临时设置soft ,hard nofile
$ ulimit -S 1024000

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

miniconda的安装及使用

去年我在调研AIGC软件的时候,遇到有一些项目需要用到conda安装库。不过用得比较少,而且用pip也完全可以胜任,我就没有特意去学。不过这种事情吧……大刘说了,这玩意就像埋在后院里的尸体,埋得再深也没用,睡不好觉。早晚有一天你得把它挖出来,扔得远远的。 最近做的项目中…

RustDesk 搭建

Web、API 部署教程:https://www.52pojie.cn/thread-1708319-1-1.html RustDesk 服务端下载:https://github.com/rustdesk/rustdesk-server/releases RustDesk 客户端下载:https://github.com/rustdesk/rustdesk/releases/tag/1.2.3-2 RustDesk 官方部署教程:https://rustde…

window下的随机数与随机数种子——[MTCTF 2021]Random

题目 Die IDA main函数 dword_1B336C 与 v7 ,是两个记录循环次数的计数器 红框:加密逻辑,很简单 绿框:成功条件,需要满足两个,第一个是 dword_1B336C == 43 ,当 dword_1B336C 不等于43的时候进入else,然后需要满足条件 input[v9] == key[v8] 与 v7 == 42 key0x3E, 0x…

【NAS】绿联NAS UGOS PRO 使用natfrp(Sakura Frp)内网穿透访问Docker应用

配置加速 https://registry.cn-hongkong.aliyuncs.com 下载镜像 创建容器 【容器】-【创建】-【手动创建】- 选择你下载的镜像即可在日志中查看密码访问容器 以HTTPS方式访问容器输入从日志中得到的密码。 然后去官网查看访问密钥(不知道官网的就去看截图上的URL)将得到的密钥…

靶机练习:born2root

信息收集 扫描全端口以发现服务发现端口80端口信息: Secretes Company / robots.txt / Wordpress-blog 访问80端口web服务About Us的用户名可以记录下来:Martin Hadi Jimmy robots.txt 有两个路径: /wordpress-blog /files 分别访问一下好像暂时没什么东西,拿用户名可以先爆破…

【进程间通信】——共享内存

目录共享内存 (Shared Memory)前言虚拟内存驻留内存System V 共享内存函数及其用途 Unix系统的System-V版本中就引入了三种进程间通信方式,分别是消息队列、共享内存、信号量集。这三种通信方式也被称为System-V IPC对象。 共享内存 (Shared Memory) 前言 ​ 在下文或接下来的…

对题目集4~6的总结

1.前言答题判题程序-4是前几次题目迭代,在前几次的基础上新增加了选择、填空题,按照之前的思路拓展即可。 家居强电电路模拟程序-1、2总体难度适中,不过与普通的信息处理相比,分配电压要考虑更多情况。2.设计与分析答题判题程序-4点击查看题目 设计实现答题程序,模拟一个小…

Linux之系统故障汇总

一、系统可能会出现的故障 1、管理员密码忘记 2、系统无法正常启动grub损坏(MBR损坏、grub配置文件丢失) 系统初始化故障(某文件系统无法正常挂载、驱动不兼容) 服务故障 用户无法登录系统(bash程序故障)3、命令无法运行 4、编译过程无法继续(开发环境缺少基本组件) 二、单用户…

Microsoft 收集分享

链接:https://pan.baidu.com/s/13Lw4B6Qxq5Y65sAXwWOXYA?pwd=l9wj Windows Server 2022SW_DVD9_Win_Server_STD_CORE_2022_2108.33_64Bit_English_DC_STD_MLF_X23-75607.ISO SHA256:5B4721A21DF2E2D7C20803BB9D64C2B5BF6ED72E612480CF9298969001B65CE8 updated May 2024SW_DV…

一文搞懂 ARM 64 系列: 寄存器

一文搞懂 ARM 64 系列: 寄存器ARM 64中包含多种寄存器,下面介绍一些常见的寄存器。 1 通用寄存器 ARM 64包含31个64bit寄存器,记为X0~X30。 每一个通用寄存器,它的低32bit都可以被访问,记为W0~W30。在这31个通用寄存器中,有2个寄存器比较特殊。 X29寄存器被作为栈帧寄存器…

Vue第三方库与插件实战手册

这篇文章介绍了如何在Vue框架中实现数据的高效验证与处理,以及如何集成ECharts、D3.js、Chart.js等图表库优化数据可视化效果。同时,探讨了Progressive Web App(PWA)的接入与优化策略,以提升Web应用的用户体验与加载速度。title: Vue第三方库与插件实战手册 date: 2024/6/8 …