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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏