Link

Linux 文件描述符

目录

  1. Linux 文件描述符
    1. 文件描述符是什么?
    2. 查看文件描述符限制
    3. 系统级别设置文件描述符限制
    4. 用户级别设置文件描述符限制
  2. 参考资料

文件描述符是什么?

在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。

文件、文件描述符、进程三者间有如下关系:

  • 每个文件描述符会与一个打开的文件相对应
  • 不同的文件描述符也可能指向同一个文件
  • 相同的文件可以被不同的进程打开,也可以在同一个进程被多次打开

查看文件描述符限制

通过下列命令获取系统最大可打开的文件描述符数量

cat /proc/sys/fs/file-max
381699

查看 soft limit 和 hard limit

ulimit -Hn
ulimit -Sn

系统级别设置文件描述符限制

系统级别的限制可以通过修改此文件完成

echo "fs.file-max" = 100000 >>/etc/sysctl.conf
#运行下列命令立即生效
sysctl -p

如果服务器打开文件描述符的数量已经达到上限,可以通过下列命令直接修改(不写入配置文件)。

sysctl -w fs.file-max=100000

用户级别设置文件描述符限制

用户级别直接修改 /etc/security/limits.conf文件即可,可以用 ‘*’ 通配符来表示所有用户。

重新登录后用 ulimit -Hnulimit -Sn可查看设置是否生效。默认soft=1024,hard=4096。

soft 指的是当前系统生效的设置值,hard 表明系统中所能设定的最大值。

vi /etc/security/limits.conf
httpd soft nofile 4096
httpd hard nofile 10240

也可以通过 ulimit -Sn 或者 ulimit -Hn 来修改,但此配置重启后会失效。

设置原则是:超级用户可以随便修改 hard 值和 soft 值,但 soft 值必须小于等于 hard 值。

普通用户可以设置 hard 值,但必须比之前的 hard 值小。可以随意设置 soft 值,必须小于 hard 值。

参考资料

https://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/

http://man7.org/linux/man-pages/man5/limits.conf.5.html

https://blog.csdn.net/kumu_linux/article/details/7877770

https://blog.csdn.net/cywosp/java/article/details/38965239

https://segmentfault.com/a/1190000009724931