Linux 文件描述符
目录
文件描述符是什么?
在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 -Hn
和ulimit -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