Linux三种修改打开文件数量限制的方法

2023-11-01

系统环境

Centos7

为什么要限制打开文件的数量?

因为操作系统需要内存来管理每个文件,所以可以打开的文件数可能会受到限制。由于程序也可以关闭文件处理程序,它可以创建任意大小的文件,直到所有可用磁盘空间都已满为止。在这种情况下,安全性的一个方面是通过施加限制来防止资源耗尽。

可以看到Linux系统中打开的文件描述符的最大数量,如下所示:

[root@localhost ~]# cat /proc/sys/fs/file-max 
180965

该值显示用户每次登录会话可以打开的文件数,你会注意到,结果可能会因系统而异。出于某些原因,可能需要增加限制集的值。这就是为什么Linux系统提供了修改这些限制的可能性(增加或减少),方法是更改每个进程和每个系统打开文件数的最大值。

法一:使用ulimit命令

ulimit命令可用来增加在shell中打开文件的数量。这个命令是系统内置命令,因此它只影响bash和从它启动的程序。ulimit语法如下:

ulimit  [选项] [限制数值]

下面选项决定了什么是有限的:

  • -a 显示当前所有限制的报告
  • -f (文件限制)限制shell能创建文件的大小
  • -n 限制打开的文件描述符的数量。
  • -H和-S 它们分别被设置为硬限制和软限制。硬限制可能不会随之增加,但软限制可能会增加。如果没有提供任何选项,ulimit将同时设置硬限制和软限制。

查看当前打开文件的软限制,可以使用下面命令:

[root@localhost ~]# ulimit -a |grep open
open files                      (-n) 1024
或者
[root@localhost ~]# ulimit -n
1024

如果需要查看硬限制,适应下面命令:

[root@localhost ~]# ulimit -Hn
4096

下面修改打开文件的数量:

[root@localhost ~]# ulimit -n 2048

然后来查看一下:

[root@localhost ~]# ulimit -Hn
2048
[root@localhost ~]# ulimit -Sn
2048

在这里插入图片描述
发现,设置ulimit 值的时候,没有指定-H或者-S,两个限制都会设定相同的值。

现在的问题是,如果退出登录或者重新启动计算机,该值将被重置。请记住,要使生效,需要编辑用户的.bashrc或者.bash_profile配置文件,通过将ulimit命令行添加到文件的末尾,可以使参数生效。

[root@localhost ~]# echo "ulimit -n 2048" >> ~/.bashrc

在这里插入图片描述

方法二:使用PAM模块

最好通过名为pam_limits的PAM模块实现这种限制。需要通过编辑/etc/security/limits.conf文件来配置它。这个文件包含四个基本字段:

domain:描述了在哪些实体中应用限制。它可以是user、group(组名前面加@表示组)或匹配所有用户,使用(*)通配符。通配符不适应与root用户。

type:这里表示限制为硬限制还是软限制?硬限制是由系统管理员添加的,在任何情况下都不能超过,而用户可以临时超过软限制。还可以使用破折号-来表示一个限制是硬的和软的。请注意,软限制可以增加到硬限制的值

type:它指定被限制条目的类型。可以是core(限制核心文件大小(KB)),data(最大数据大小(KB)),fsize(最大文件大小(KB)),nofile(打开的文件描述符的最大数目),nproc(最大进程数),等类型。更多类型可以使用man limits.conf查看。

type: 这里使填写应用限制的数值。

下面实例可以对照了解一下。

[root@localhost ~]# tail -12 /etc/security/limits.conf 
#
#

#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4

# End of file

在这里插入图片描述
要编辑所有用户打开文件的最大数量,可以在文件末尾添加以下行:

[root@localhost ~]# vim /etc/security/limits.conf 
* hard nofile 20000
* soft nofile 15000

在这里插入图片描述
之后,需要编辑文件/etc/pam.d/login配置文件,在最后添加以下一条内容:

[root@localhost ~]# vim /etc/pam.d/login 
session    required pam_limits.so

在这里插入图片描述
保存文件。然后退出登录,或者重启系统。可以看到软限制和硬限制的值都修改成功了:

[root@localhost ~]# ulimit -Sn
15000
[root@localhost ~]# ulimit -Hn
20000

方法三:

查看系统最大打开文件描述符数量:

[root@localhost ~]# cat /proc/sys/fs/file-max 
180965

临时设置该值:

[root@localhost ~]# echo "1000000" > /proc/sys/fs/file-max 

在这里插入图片描述
永久性设置,需要在/etc/sysctl.conf中设置,并让它生效:

[root@localhost ~]# echo "fs.file-max = 1000000" >> /etc/sysctl.conf 
[root@localhost ~]# sysctl -p
fs.file-max = 1000000

总结

所有进程打开的文件描述符数量不能超过/proc/sys/fs/file-max。单个进程打开的文件描述符数不能超过user limit中nofile的soft limit。nofile的soft limit不能超过其hard limit。

参考链接 :

3 种方法教你在 Linux 中修改打开文件数量限制 :https://mp.weixin.qq.com/s/tcwTk7LF9ExLHwilnILwyg

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux三种修改打开文件数量限制的方法 的相关文章

随机推荐

  • vant组件时间选择器修改时间格式以及默认展示当天时间

    vant的时间控件默认展示当天时间
  • 源码安装以太坊/wtc

    1 安装go 先更新一下 sudo apt get update sudo apt get y upgrade 下载源码https www golangtc com download 并解压 sudo tar xvf go1 9 2 lin
  • SQL盲注及python脚本编写

    1 什么是盲注 盲注就是在 sql 注入过程中 sql 语句执行的选择后 选择的数据不能回显 到前端页面 此时 我们需要利用一些方法进行判断或者尝试 这个过程称之为盲注 从 background 1 中 我们可以知道盲注分为三类 基于布尔
  • 基于 SpringMvc + OpenCV 实现的答题卡识别系统(附源码)

    java opencv 项目介绍 OpenCV是一个基于BSD许可 开源 发行的跨平台计算机视觉库 它提供了一系列图像处理和计算机视觉方面很多通用算法 是研究图像处理技术的一个很不错的工具 最初开始接触是2016年因为公司项目需要 但是当时
  • AlertDialog全屏显示的问题

    有时候 我们需要直接显示全屏的dialog 平常的时候会有一圈边框 不好看 第一步 编写style 第二步 在使用的时候带入 最简单的全屏就这么完成了 简单不 咩哈哈哈哈哈哈哈
  • Python入门实战题目

    1 有1 2 3 4个数字 能组成多少个互不相同且无重复数字的三位数 都是多少 2 两个乒乓球队进行比赛 各出三人 甲队为a b c三人 乙队为x y z三人 已抽签决定比赛名单 有人向队员打听比赛的名单 a说他不和x比 c说他不和x z比
  • Python3 [爬虫实战] Redis+Flask 动态维护cookies池(上)

    Redis 使用 1 首先去官网下载Reidszip文件 http www redis cn topics config html 2 Reids的安装 直接解压缩zip文件 然后放在一个文件夹中 在文件夹路径下用dos窗口启动服务器端 r
  • 入门算法题002

    题目 给你一个正整数n 假设有两个质数加起来等于n 问一共有多少组这样的质数 思路 1 我们得要先有一个函数去判断是否是质数 2 循环拆解为两个数 暴力拆解 试下10 15分钟内做出来 public class Leecode002 pub
  • selenium爬虫运行慢如何解决?

    Selenium作为一个强大的自动化工具 可用于编写爬虫程序 尽管Selenium在处理动态网页上非常强大 但对于静态网页爬简单数据提取 使用轻量级库或工具可能更加上所述 Selenium作为一个灵活可定动化工具 在需要模拟用户行为 处理动
  • VS2005中分页和多列排序

    最近在使用ASP net 2 0的GridView 控件时 发现排序与分页功能Microsoft实现的都很简单 比如排序 在点击列名的时候来触发整页的PostBack 然后排序 但是在列头上没有一个显示升序降序的图标 这会让最终用户使用时很
  • OJ在线编程常见输入输出练习(11题)

    1 输入包括两个正整数a b 1 lt a b lt 10 9 输入数据包括多组 输出描述 输出a b的结果 输入例子1 1 5 10 20 输出例子1 6 30 import java io BufferedReader import j
  • java web 项目配置日志框架log4j

    第一步 log4j 框架所关联的第三方jar 文件 commons logging xxx jar log4j xxx jar slf4j api xxx jar slf4j log4j12 xxx jar 以下是我搭建web框架集成log
  • 【C++】“没有可用成员”问题的原因之一

    今天碰到一个定义类成员函数的时候一直提示没有可用成员的问题 琢磨半天终于解决 记录一下 以免再犯 问题描述 在头文件中声明了名称空间SALES 并在名称空间中声明了类Sales 在类中声明了一系列类成员后 切换到另一个cpp文件中定义相关的
  • 基于CIFAR100的VGG网络结构详解

    基于CIFAR100的VGG网络详解 码字不易 点赞收藏 1 数据集概况 1 1 CIFAR100 cifar100包含20个大类 共100类 train集50000张图片 test集10000张图片 CIFAR100下载地址 http w
  • QTday3(QT实现文件对话框保存操作、实现键盘触发事件【WASD控制小球的移动】)

    1 实现文件对话框保存操作 include widget h include ui widget h Widget Widget QWidget parent QWidget parent ui new Ui Widget ui gt se
  • Unity3d 在HDRP项目中更换天空球

    两种情况 首先是直接通过unityhub创建的HDRP工程中 选中Sky and Fog Volume 进行如下图中标注的操作即可 其次是旧工程中 看到此教程说明你已经将旧工程升级到新的渲染管线工程 就略过升级旧工程的步骤直接开始配置天空盒
  • iptables 查看相关命令

    参考 https www zsythink net archives 1493 一些命令的总结 1 查看对应表的所有规则 t 指定要操作的表 省略 t 表名时 默认表示操作filter 表 L 表示列出规则 即查看规则 iptables t
  • 分治法求最近点对问题

    目录 蛮力法 分治法 探究分治规模小于一定程度时采用暴力解法 蛮力法 算法思想 蛮力法 顾名思义 即穷举所有点与点之间的距离 两层循环暴力找出最近点对 算法执行可视化如图1所示 word文档GIF静态显示 附件已含动图 图1 伪代码 mat
  • Vscode 代码插件 Code Runner,一键运行代码

    Vscode 代码插件 Code Runner 一键运行代码 为了方便可以安装代码运行插件进行简单化运行 不用终端运行 Code Runner插件 一键运行代码 支持40多种语言 安装这种插件后面 可以鼠标放到代码文件上面 点击鼠标右键有个
  • Linux三种修改打开文件数量限制的方法

    系统环境 Centos7 为什么要限制打开文件的数量 因为操作系统需要内存来管理每个文件 所以可以打开的文件数可能会受到限制 由于程序也可以关闭文件处理程序 它可以创建任意大小的文件 直到所有可用磁盘空间都已满为止 在这种情况下 安全性的一