LinuxGod

LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

Linux默认的最大文件描述符数量是1024

2023年6月9日 476点热度

通常情况下,Linux默认的最大文件描述符数目是1024,对于通常的程序来说1024应当是足够使用的(Nginx、系统进程等)。并且像mysql、java等单进程处理大量恳求的应拿来说就未必了。假如单个进程打开的文件描述符数目超过了系统定义的值,都会提及“toomanyfilesopen”的错误提示。

假如想查看当前进程打开了多少个文件,可以执行如下命令查看:

lsof-n|awk'{print$2}'|sort|uniq-c|sort-nr|more

执行后可以看见,第一列是打开的文件描述符数目,第二列是进程id。

限制级别

最大文件描述符数的限制可以分为3种:

shell级别的限制

假如在shell中执行ulimit-n4096后,表示将当前用户所有进程能打开的最大文件数目设置为4096.但只是在当前shell中有效,退出后再登陆则又恢复成之前的限制。

用户级别的限制

用户级别的限制是针对具体的用户,一个用户可以通过多个shell打开,这儿不针对每一个shell限制。

系统级别的限制

这一级别的限制是对整个系统的所有用户的限制,可以执行cat/proc/sys/fs/file-max来查看。

ulimit命令ulimit功能介绍

考虑一下如下情况:

一台Linux主机上同时通过ssh登陆了20个人,假如在系统资源无限制的情况下,这20个人同时打开了100个文档,但是每位文档的大小大约有20M,这时系统的显存资源都会力不从心了。

ulimit用于限制shell启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、shell进程创建文件的大小、内存锁住的大小、常驻显存集的大小、打开文件描述符的数目、分配堆栈的最大大小、CPU时间、单个用户的最大线程数、shell进程所能使用的最大虚拟显存。同时,它支持对资源的硬限制和软限制。

ulimit可以作用于用户登入的当前shell会话,是一种临时限制。在会话中止时便结束限制,在shell中执行该命令不会影响其他shell会话。

假如想要使限制永久生效,则须要设置/etc/security/limits.conf文件,这个文件稍后会提到。

ulimit的使用说明

执行helpulimit命令可以查看一下该命令的使用说明:

2016-11-20 1.18.23.png

ulimit限制最大打开文件描述符个数

由上可知linux基础教程,假如要限制最大打开文件描述符的个数可以执行以下命令:

ulimit-n1000

该命令表示将最大打开文件描述符的个数限制为1000(只在当前shell中有效)。

这儿须要注意的地方是,linux资源限制的形式可分为软限制和硬限制。

从ulimit的使用说明来看,ulimit的参数早已包含了软限制和硬限制,-H代表硬限制,-S代表软限制。

比如,执行ulimit-Hn1000表示将硬限制设置为1000,同样ulimit-Sn1000表示将软限制设置为1000,倘若不指定-H或是-S,则相当于把软限制和硬限制都设置为1000。

它们之间的关系是:

下边通过几个反例来说明ulimit命令的使用。

ulimit-n的使用

假如你没有配置过,则默认的限制为1024

1
2

[root@localhost ~]# ulimit -n
1024

怎么给整站flash文件加描述_linux 文件描述符_linux重定向符

将限制设置为2048

1

[root@localhost ~]# ulimit -n 2048

查看软限制和硬限制

1
2
3
4

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

对于root用户,可以将降低硬限制

1
2

[root@localhost ~]# ulimit -n 2049
[root@localhost ~]#

对于普通用户,通过ulimit-n来查看

1
2

[sangjian@localhost ~]$ ulimit -n
1024

将限制改为1023,执行成功

1
2

[sangjian@localhost ~]$ ulimit -n 1023
[sangjian@localhost ~]$

将限制改为1025,执行失败

1
2

[sangjian@localhost ~]$ ulimit -n 1025
-bash: ulimit: open files: 无法修改 limit 值: 不允许的操作

可见suse linux 下载,普通用户只能缩小限制,而不能扩大限制。

刚刚说到执行ulimit-n是同时对软限制和硬限制都生效的,如今将软限制改为1000,执行成功

1
2

[sangjian@localhost ~]$ ulimit -Sn 1000
[sangjian@localhost ~]$

将软限制改为1024linux 文件描述符,执行失败,由于硬限制的值为1023

1
2

[sangjian@localhost ~]$ ulimit -Sn 1024
-bash: ulimit: open files: 无法修改 limit 值: 无效的参数

更改最大文件限制数目的方法/etc/security/limits.conf

limits.conf文件实际是LinuxPAM(插入式认证模块,PluggableAuthenticationModules)中pam_limits.so的配置文件,突破系统的默认限制,对系统访问资源有一定保护作用。limits.conf和sysctl.conf区别在于limits.conf是针对用户,而sysctl.conf是针对整个系统参数配置。

limits.conf的格式如下:

1

username|@groupname type resource limit

username|@groupname:设置须要被限制的用户名,组名后面加@和用户名区别。也可以用转义*来做所有用户的限制。

type:有soft,hard和-,soft指的是当前系统生效的设置值。hard表明系统中所能设定的最大值。soft的限制不能比har限制高。用-就表明同时设置了soft和hard的值。

resource:

1
2
3
4
5
6
7
8
9
10
11
12

  core - 限制内核文件的大小
  date - 最大数据大小
  fsize - 最大文件大小
  memlock - 最大锁定内存地址空间
  nofile - 打开文件的最大数目
  rss - 最大持久设置大小
  stack - 最大栈大小
  cpu - 以分钟为单位的最多 CPU 时间
  noproc - 进程的最大数目
  as - 地址空间限制
  maxlogins - 此用户允许登录的最大数目
  maxsyslogins - 系统所有登录的最大数量

比如,假如想把最大文件描述符数设置为4096,且对所有用户生效,则在该文件中添加:

1
2

* soft nofile 4096
* hard nofile 4096

/proc/sys/fs/file-max

该文件是系统级别的限制,可以查看该文件:

1
2

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

可以看见,系统级别的最大文件描述符数是185983,该限制是对整个系统的所有用户生效。并且不是就不可以设置更大的限制数目呢?答案是否定的。对于root来说,可以设置小于这个数目的限制,比如:

1
2

[root@localhost ~]# ulimit -n 185984
[root@localhost ~]#

发觉执行成功了,说明root是可以更改为更大的限制数目的。

虽然,/proc/sys/fs/file-max是系统给出的建议值,系统会计算资源给出一个和合理值,通常跟显存有关系,显存越大,改值越大,而且仅仅是一个建议值linux 文件描述符,limits.conf的设定完全可以超过/proc/sys/fs/file-max。通过limits.conf文件来配置也是可以的。

须要注意的地方ulimit-n设置的是当前用户单个进程才能打开的文件描述符个数还是所有进程的文件描述符个数?

对于第一点,网上这两种说法都有,具体我也做了一些试验,比如,当用vim查看一个文件时,通过另一个shell登陆后,查看vim进程的pid:

1
2
3

[sangjian@localhost ~]$ ps -ef | grep vim
sangjian 6099 6036 0 23:39 pts/0 00:00:00 vim test.sh
sangjian 6101 5986 0 23:39 pts/3 00:00:00 grep --color=auto vim

可知,pid是6099,查看/proc/6099/fd中的文件:

1
2
3
4
5
6

[sangjian@localhost ~]$ ll /proc/6099/fd
总用量 0
lrwx------. 1 sangjian sangjian 64 11月 19 23:41 0 -> /dev/pts/0
lrwx------. 1 sangjian sangjian 64 11月 19 23:41 1 -> /dev/pts/0
lrwx------. 1 sangjian sangjian 64 11月 19 23:39 2 -> /dev/pts/0
lrwx------. 1 sangjian sangjian 64 11月 19 23:41 4 -> /home/sangjian/.test.sh.swp

每位进程的信息就会在/proc目录中保存,fd目录为打开的文件描述符,可以看见当前打开了4个文件描述符。

更改/etc/security/limits.conf文件:

1
2

sangjian soft nofile 20
sangjian hard nofile 20

将sangjian这个用户的最大打开文件描述符个数设置为20,由于设置太小的话shell登陆都不成功。之后新开了6个shell以sangjian这个用户来登陆,而且每位都用vim打开一个文件,结果是都可以打开,这也就是说使用ulimit-n限制的是每位进程最大打开文件描述符的数目。

lsof-ppid查看的结果是否都是该进程打开的文件描述符?

不都是。

lsof命令列举的是一个进程及其子进程与什么文件有关联。

请注意:关联文件和打开文件描述符是不同的,关联文件的数目可能远远小于打开的文件描述符的数目。

例如刚才查看的vim命令执行后,在/proc目录下查看了打开的文件描述符是4个,这么我们再通过lsof来看一下:

可以听到,这个数目早已远远小于4了,这是为何呢?

google找了一些资料,大约缘由是lsof会列举系统中所占用的资源,并且这种资源不一定会占用打开的文件描述符(例如共享显存,讯号量,消息队列,显存映射等,尽管占用了这种资源但不占用打开文件号),因而有可能出现cat/proc/sys/fs/file-max的值大于lsof|wc-l。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: linux系统 shell 文件描述符
最后更新:2023年6月9日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
如何在Linux系统中查看CPU信息使用lscpu命令行 linux服务器搭建ftp的6下安装vsftpd步骤及步骤 贵州工业职业技术学院求职意向期望工作地--诚聘英才 实验1Linux安装实验掌握虚拟机的使用 Linux系统tar命令的使用方法及使用命令教程 linux 开源nas系统 杰和科技NAS服务器媒体见面会在京召开 Android与Linux开发大不同 Linux系统软件安装包:自己动手,安装不用愁 车市新战局:汽车操作系统会复制智能手机的历史吗? Linux文件系统种类 如何卸载用源码包安装的软件?在线视频教程推荐 「职位」ASP.、PHP、Linux服务器集群开发 Torvalds:Linux内核开发的创新前景充满了热情 Linux文件系统的结构从终端窗口探索Linux目录树结构 卸载软件命令Linux.You linux软件开发如何入门?学习Linux步骤及学习方法介绍 14年Linux发行版的有趣历史观点 Linux中不像Windows可以直接在控制面板中卸载? 2018年波及众多Linux发行版的性能对比会更加深入 如何用源码包安装的软件?name的方法总结
嵌入式Linux操作系统学习规划+LINUX路线,主攻江苏电信天翼校园客户端故障指引及解决办法(101)英特尔GMAGMA950显卡驱动程序/WIN8/8.1电信校园网宽带用USB数据线共享给电脑无线上网国防科大开源操作系统:它只是一个吉祥的象征10个常用Linux文本查看命令及其详细说明和使用示例Linux嵌入式系统内核裁剪与定制方法的介绍情况淘宝教育热卖C语言编程开发C++程序设计零基础入门课程从CPU、内存、硬盘、显卡等这些方面安装Linux系统的最低配置Linux通过chkconfig设置开机启动服务创建的几种常见方式(技术分析)Linux多线程的使用与操作系统的区别通常rar命令由一个主命令加若干选项(可选)构成RedHatLinux中自动运行程序中的应用linux 读写文件 关于Linux内核的神秘面纱,你知道几个?使用wget实用程序的有用命令行工具的使用怎么设置linux开机项自启动?方式是怎样的?嵌入式Linux应用层与驱动层要想学习关于Linux内核的交叉编译步骤和方法:步骤、方法STM32嵌入式linux开发流程及应用程序分析-STMlinux下有哪些文件在介绍lsof命令实用用法介绍?
0渗透操作0x02绕过disable_functions插件(组图) 掌握Linux基础命令-上海怡健医学系统 文本文件的编辑命令:vim的三种状态模式、基本操作 如何在CentOS上执行流行的MySQL数据库服务器的基本安装 Linux中如何查看分区的文件系统类型的方法-乐题库 【】U盘su的输出是否有usb-storage, Linux include头文件路径全解析:系统默认路径一网打尽! du下所有的文件和文件夹(不含子目录),统计符号链接所指向的大小 Linux系统下如何定位出CPU使用率过高的进程?(组图) 怎么设置linux开机项自启动?方式是怎样的? 研究一下Linux内存管理的32位Linux系统--虚拟地址 搜狗输入法企业版:多设备输入新体验 Linux进程间通信(IPC)有几种方式 《Linux基础知识》命令文件操作相关命令操作命令 PXE网络装机Linux系统一PXE装机概述·PXE介绍 Windows中命令提示符批量修改文件名称没有直接的方法是什么? 移动OS三分天下的是PalmPDA?PDA论坛 强制删除后如何恢复误删的文件呢?3个简单有效的方法 Linux软件安装查询 防火墙和SELinux关闭防火墙及SELinux链接进行下载地址
标签聚合
linux服务器 应用 linux系统 文件目录 内核 操作 软件 虚拟机 命令 文件
书籍
课程
技术群
技术干货大合集↓
  • 2023年9月 / 78篇
  • 2023年8月 / 93篇
  • 2023年7月 / 94篇
  • 2023年6月 / 90篇
  • 2023年5月 / 93篇
  • 2023年4月 / 90篇
  • 2023年3月 / 129篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.