[ 总结 ] Linux 下文件描述符
1、概述:
文件描述符是内核为了高效管理已被打开的文件所创建的索引。是一个非负整数,用于代指被打开的文件。所有通过I/O操作的系统调用都通过文件描述符。
文件描述符用以表明每一个被进程所打开的文件和socket
2、文件描述符的限制:
Linux下最大文件描述符的限制有两个:
(1) 系统级限制:sysctl命令和proc文件系统中查看到的数值是一样的,这属于系统限制,它是限制所有用户打开文件描述符的总和
(2) 用户级限制:ulimit命令看到的是用户级的最大文件描述符限制,也就是说每一个用户登录后执行的程序占用的文件描述符总数不得超过这个限制。
3、修改文件描述符:
(1)修改用户级文件描述符
临时修改:ulimit -SHn 10240 重启失效
[root@super ~]# ulimit -SHn 10240
[root@super ~]# ulimit -n
10240
永久修改:修改 /etc/security/limits.conf 在末尾添加如下:
test soft nofile 10240
test hard nofile 20480
修改完生效
上面设置的意思是:test用户文件描述符达到10240个的时候,触发告警。
test用户文件描述符达到20480个的时候,达到最高上限。
(2)修改系统级文件描述符
临时修改:sysctl fs.file-max=40000 或 echo 40000 > /proc/sys/fs/file-max
[root@super ~]# sysctl fs.file-max=40000
[root@super ~]# sysctl -a | grep fs.file-max
fs.file-max = 40000
永久生效:echo "fs.file-max=40000" >> /etc/sysctl.conf 使用 sysctl -p 修改生效,不用重启
[root@super ~]# echo "fs.file-max=50000" >> /etc/sysctl.conf
[root@super ~]# sysctl -p
[root@super ~]# sysctl -a | grep fs.file-max --color
fs.file-max = 50000
当服务器运行,Apache、squid、Mysql、Oracle时,都需要对其进行优化调整。