当文件被打开访问时,操作系统临时分配一个名为文件句柄的数字。主内存的一个特殊区域是为文件句柄预留的,这个区域的大小决定了一次可以打开多少个文件。

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 openopen files                      (-n) 1024或者[root@localhost ~]# ulimit -n1024

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

[root@localhost ~]# ulimit -Hn4096

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

[root@localhost ~]# ulimit -n 2048

然后来查看一下:

[root@localhost ~]# ulimit -Hn2048[root@localhost ~]# ulimit -Sn2048

发现,设置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 -Sn15000[root@localhost ~]# ulimit -Hn20000

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

[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 -pfs.file-max = 1000000

总结

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

END

官方站点:www.linuxprobe.com

Linux命令大全:www.linuxcool.com

刘遄老师QQ:5604922

Linux技术交流群:193666693

(新群,火热加群中……)

想要学习Linux系统的读者可以点击"阅读原文"按钮来了解书籍《Linux就该这么学》,同时也非常适合专业的运维人员阅读,成为辅助您工作的高价值工具书!

点分享

点收藏

点点赞

点在看

linux hosts文件如何修改_3 种方法教你在 Linux 中修改打开文件数量限制相关推荐

  1. 计算机无法查看隐藏文件夹,怎么查看隐藏文件?2种方法教你查看电脑中的隐藏文件...

    有时候我们在打开文件夹的时候,明明是空的什么文件也没有,但是却发现仍然会占用磁盘空间,这是怎么回事呢?后来听说可能是有隐藏文件,这文件都隐藏了怎么才能看见呢?关于电脑中怎么查看隐藏文件的问题,小编给大 ...

  2. 用代码加密,2种方法教你在C#中保护PPT文档

    数字信息的保护一直是网络世界中的重要方面.为了保护数字内容,已经设计了各种方式和技术.因此,本文明确针对MS PowerPoint演示文稿的安全性,并提供保护PPTX文档安全的不同方法.在本文中,将学 ...

  3. linux清除文件内容 ,Linux清除文件内容的几种方法

    # 清空或删除大文件内容的五种方法: # 法一:通过重定向到 Null 来清空文件内容 $ >test.sh # 法二:使用 'true' 命令重定向来清空文件 $ true > test ...

  4. 怎么在mac打开home文件夹? mac打开home文件夹的两种方法

    今天小编给大家带来怎么在mac打开home文件夹? mac打开home文件夹的两种方法教程,那么具体该怎么打开呢?下面我们就来看看mac打开home文件夹的两种方法,需要的朋友可以参考下.记得收藏哦 ...

  5. Linux清空文件内容的三种方法

    Linux清空文件内容的三种方法 测试文件:a.txt 第一种: $> a.txt 第二种: $echo "" > a.txt 第三种: $cat /dev/null ...

  6. linux系统服务器怎么登录日志文件,Linux服务器查看日志的几种方法

    Linux服务器查看日志的几种方法 1.进入文件所在件目录,比 cd /opt/tomcat7/logs 2.命令日志,分析需求场景打开需要的日志 比如: tail  -f   catalina.ou ...

  7. linux系统中清空文件内容的三种方法

    1.使用vi/vim命令打开文件后,输入"%d"清空,后保存即可.但当文件内容较大时,处理较慢,命令如下: vim file_name :%d :wq 2.使用cat命令情况,命令 ...

  8. php读取文件内容不全,php读取文件内容的三种方法

    //**************第一种读取方式***************************** 代码如下: header("content-type:text/html;chars ...

  9. linux配置yum源的三种方法:

    linux配置yum源的三种方法: 1.配置网络yum源 2.通过上传镜像文件配置本地yum源 3.通过连接存储或本地镜像文件配置本地yum源(虚拟机) 配置各种yum源的时候,需要提前知道自己的li ...

最新文章

  1. linux swp 内存不足,Linux 增加 Swap 交换分区解决内存不足
  2. 深度并非一切:普林斯顿、英特尔提出ParNet,速度和准确性显著优于ResNet
  3. C++程序崩溃生成dump
  4. 深度学习时代的数据科学和自然语言处理
  5. 计算机二级vb和vba,读取本机硬件信息的VBA代码
  6. 20应用统计考研复试要点(part5)--统计学
  7. 使用CSS属性处理前端开发中长文本造成的内容显示重叠问题
  8. leetcode 515. 在每个树行中找最大值(层序遍历06)
  9. [css] 为什么说css的选择器一般不要超过三级?
  10. 游戏账号交易平台网站源码
  11. 越狱Season 1- Episode 16
  12. 第五章 线性回归 学习笔记下
  13. 自建电驴服务器,电驴服务器怎么连接 eMule连接服务器教程
  14. JQuery插件:JQuery.Slidebox.JS
  15. Projector 远程访问 pycharm IDE
  16. guid分区怎么装win7_GUID分区是否可以装Win7?
  17. [阿毛]Ubuntu 16安装CH340串口驱动
  18. 关于textarea打印问题
  19. java计算机毕业设计重庆旅游景点源码+数据库+系统+lw文档
  20. python批量添加姓名生成奖状批量处理图片教师学生奖状

热门文章

  1. java中为什么使用上转型和下转型
  2. 网络爬虫--19.【Scrapy-Redis实战】分布式爬虫爬取房天下--环境准备
  3. Flask爱家租房--房屋管理(获取主页幻灯片展示的房屋基本信息)
  4. Django项目--首页静态化
  5. python中itsdangerous模块
  6. jquery ztree 设置勾选_047 JAVA-jQuery
  7. python命令方式和关键字
  8. 玩Python遇到的问题一二三及解决办法
  9. 猫和老鼠java下载安装_tomcat(Java服务器)
  10. 进程管理—进程描述符(task_struct)