当文件被打开访问时,操作系统临时分配一个名为文件句柄的数字。主内存的一个特殊区域是为文件句柄预留的,这个区域的大小决定了一次可以打开多少个文件。Linux上的进程受到许多限制,这些限制也阻碍它们正确地执行,而且每个进程都有几个与之相关的限制。shell限制程序可以同时打开的文件句柄的数量。

系统环境

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。

在Linux中修改打开文件数量限制的3种方法相关推荐

  1. 在Linux中修改打开文件数量和进程数量限制的3种方法

    方法一:使用ulimit命令 ulimit命令可用来增加在shell中打开文件的数量.这个命令是系统内置命令,因此它只影响bash和从它启动的程序. ulimit -n 65535 方法二:使用PAM ...

  2. linux hosts文件如何修改_3 种方法教你在 Linux 中修改打开文件数量限制

    当文件被打开访问时,操作系统临时分配一个名为文件句柄的数字.主内存的一个特殊区域是为文件句柄预留的,这个区域的大小决定了一次可以打开多少个文件. Linux上的进程受到许多限制,这些限制也阻碍它们正确 ...

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

    系统环境 Centos7 为什么要限制打开文件的数量? 因为操作系统需要内存来管理每个文件,所以可以打开的文件数可能会受到限制.由于程序也可以关闭文件处理程序,它可以创建任意大小的文件,直到所有可用磁 ...

  4. win10计算机文件夹选项在哪里,w10文件夹选项在哪_win10打开文件夹选项的三种方法...

    win10系统的文件夹选项在哪里?很多使用win1032位旗舰版系统的用户都会碰到需要对文件夹进行一些设置的情况,这时往往需要用到文件夹选项,可能有网友不知道文件夹选项在哪.没关系,下面小编就来为大家 ...

  5. ​linux中使用文本工具截取ip 的几种方法

    linux中使用文本工具截取ip 的几种方法 1,使用awk工具 [root@mycentos data]# ifconfig ens33 ens33: flags=4163<UP,BROADC ...

  6. linux 误删除mysql表能恢复吗,Linux中误删除数据文件和归档日志的恢复方法

    误删除前,归档日志2个,用户数据4480064条 复制代码 代码如下: [oracle@station90 datafile]$ sqlplus /nolog SQL> conn hr/hr C ...

  7. mysql改存储引擎教程_MySQL中修改数据表存储引擎的三种方法

    第一种方法:ALTER TABLE 将表从一个引擎修改为另一个引擎最简单的办法是使用ALTER TABLE语句,转换表的存储引擎会导致失去原引擎相关的所有特性. 例:将mytable的引擎修改为Inn ...

  8. idea中修改jsp文件不用再重启tomcat的方法

    在图中红框处选择Update classes and resources(建议两处都选)----更新java,jsp以及静态资源等. 需要注意的是在deployment中要选择wai包,否则没有以上选 ...

  9. linux系统下搜索文件是否存在的五种方法

    搜索文件命令: 1.find:它的格式为" find <指定目录> <指定条件> <指定动作>",linux系统下搜索所有mysql文件所在的位 ...

最新文章

  1. 利用反射对应数据库字段
  2. mnist学习实例(1)
  3. 改善WPF应用程序性能的10大方法(转)
  4. linux sftp远程连接命令
  5. C语言 03-第一个C程序代码分析
  6. Mysql实现企业级日志管理、备份与恢复
  7. 长链剖分:O(nlogn)预处理O(1)求kth祖先
  8. 网页抢东西插件_强烈推荐一款Chrome插件DownFaster 一键下载网页资源
  9. .net研发工程师面试题,在线交流答案
  10. 三维空间刚体运动4-5:四元数多点离散数值解插值方法:Sping
  11. keychain 的学习
  12. 安装sphinx的心得和错误处理
  13. PHP利用GD库将微信小程序二维码和用户头像拼接且用户在微信服务号回复指定内容将拼接的二维码返回
  14. 以下关于java文件名的叙述正确的有_sun java认证考试题库
  15. 乒乓球单循环赛_乒乓球单循环比赛规则
  16. 中国IP库(2022年最新版-包含港澳台地区)
  17. (附源码)spring boot智能车APP毕业设计250623
  18. python成绩统计及格学平成_强化学习训练Chrome小恐龙Dino:最高超过4000分
  19. 财务内部收益率用计算机怎么算,财务内部收益率计算公式
  20. android Activity设置透明主题样式方法

热门文章

  1. 每周推荐短视频:GDP 增速放缓,对于企业意味着什么?
  2. 第二章 机器学习基础
  3. 猪肉价格的波动因素分析
  4. 天气查询 —— UNI-APP试水
  5. 正则引擎入门——基于虚拟机的正则匹配(二)
  6. mysql如何实现自增序列
  7. 【网络】IPV4数据报头部格式
  8. helm快速部署spinnaker
  9. 基于STM32F103RC移植uc/OS系统
  10. prim算法,求最小生成树