19、修改文件描述符
19.1、文件描述符介绍:
1、文件描述符定义:
文件描述符是内核为了高效管理已被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。
文件描述符是一个简单的非负整数,用以表明每个被进程打开的文件。程序刚刚启动时,第一个打开的文件是0,第二个是1,以此类推。
也可以理解为文件的身份ID。
2、文件描述符的限制:
Linux中最大文件描述符的限制有两个方面,一个是用户级限制,一个是系统级限制。
(1)用户级限制:
ulimit命令看到的是用户级的最大文件描述符限制,也就是说每一个用户登录后执行的程序占用文件描述符的总数不能超过这个限制。
(2)系统级限制:
sysctl命令与proc文件系统中查看到的数值是一样的,这属于系统级限制,它是限制所有用户打开文件描述符的总和。
19.2、修改系统级限制:
1、查看系统级文件描述符的数量:
(1)方式一:
[root@slave-node1 ~]# sysctl -a | grep file-max
(2)方式二:
[root@slave-node1 ~]# cat /proc/sys/fs/file-max
2、修改:
[root@slave-node1 ~]# sysctl -w fs.file-max=1000000
[root@slave-node1 ~]# sysctl -a | grep fs.file-max
[root@slave-node1 ~]# cat /proc/sys/fs/file-max
#以上只是临时生效,重启服务器后失效,如果想永久保存需要按如下步骤修改配置文件。
[root@slave-node1 ~]# echo "fs.file-max=1000000" >>/etc/sysctl.conf
[root@slave-node1 ~]# sysctl -p
19.3、修改用户级限制:
1、查看用户级文件描述符的数量:
[root@slave-node1 ~]# ulimit -n
2、修改:
[root@slave-node1 ~]# ulimit -SHn 65535
# S表示:软性限额;H表示:硬性限额,n表示:打开文件描述符的最大个数。
# ulimit -n:表示查看用户级的文件描述符数量。
# ulimit -Sn:表示查看用户级文件描述符的软性限额数量。
# ulimit -Hn:表示查看用户级文件描述符的硬性限额数量。
# ulimit -Sn 65535:表示修改用户级描述符的软性限额。
# ulimit -Hn 65535:表示修改用户级描述符的硬性限额。
# ulimit -n 65535 等价于 ulimit -SHn 65535:表示修改用户级描述符的软性限额和硬性限额。
[root@slave-node1 ~]# ulimit -n
#以上只是临时生效,重启服务器后失效,如果想永久保存需要按如下步骤修改配置文件。
[root@slave-node1 ~]# echo "* - nofile 65535" >>/etc/security/limits.conf
# * 代表所有用户,如果是特定用户,将 * 换为指定户名即可。
# - 表示文件描述符的软性限额和硬性限额同时被设定。
或者
[root@slave-node1 ~]# cat >>/etc/security/limits.conf<<EOF
* soft nofile 65535
* hard nofile 65535
EOF