系统最大fd数和进程中最大fd数

文件描述符,fd?

当每个程序打开文件时,系统会返回一个文件描述符,程序为了处理文件需要引用这个文件描述符,简称fd。fd是一个整数,从0开始,其中0为标准输入,1和2分别为标准输出和标准错误输出。比如printf就默认使用stdout。fd是以进程为单位的,每个进程有一个最大的fd数目,可以使用ulimit设置。

当一个进程尝试使用open函数打开一个新文件时,内核open中会查找当前进程的文件描述符集合,查看待分配的文件描述符是否超出了进程的最大值,如果没有超出最大值,才会为此进程分配一个fd,接着处理文件的read/write等函数就可以引用此文件描述符。

同样的,在open函数中,也会查看系统中所有的fd总数是否超出了file-max 中的设置,如果超出了最大限制,就会open失败。

 

怎么样修改系统的fd最大数目限制?

1)fd的系统最大值在/proc/sys/fs/file-max中。

2)进程fd最大数在ulimit中设置。

posted on 2016-02-16 10:34 开心happy 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/minihaohao/p/5175051.html

在 Linux 系统中,查看**打开最大文件**涉及两个层面的设置: --- ### ✅ 1. **系统最大文件(全局限制)** 查看系统全局最大可打开文件: ```bash cat /proc/sys/fs/file-max ``` - 含义:系统中所有进程总共能打开的文件描述符(FD)上限。 - 示例输出:`98123` --- ### ✅ 2. **用户/进程最大文件(单进程限制)** 使用 `ulimit` 命令查看当前 shell 会话的限制: ```bash ulimit -n ``` - 输出示例:`1024` - 含义:当前用户或进程可打开的文件描述符最大量(软限制)。 查看软限制硬限制: ```bash ulimit -Sn # 软限制 ulimit -Hn # 硬限制 ``` --- ### ✅ 3. **系统当前已分配的文件句柄** 查看当前系统使用的文件描述符量: ```bash cat /proc/sys/fs/file-nr ``` - 输出示例:`1234 56 98123` - 第一个字:当前已分配的 FD 量 - 第二个字:已分配但未使用的 FD 量 - 第三个字:系统最大 FD 量(等于 `file-max`) --- ### ✅ 4. **修改最大文件(临时)** #### 修改系统最大文件: ```bash sysctl -w fs.file-max=2097152 ``` #### 修改用户级最大文件(当前 shell): ```bash ulimit -n 2048 ``` --- ### ✅ 5. **永久生效配置** #### 修改 `/etc/sysctl.conf`(系统级): ```bash fs.file-max = 2097152 ``` 然后执行: ```bash sysctl -p ``` #### 修改用户限制(如 `root` 或 `nginx` 用户): 编辑 `/etc/security/limits.conf`: ```bash * soft nofile 65536 * hard nofile 65536 ``` 或对特定用户设置: ```bash nginx soft nofile 65536 nginx hard nofile 65536 ``` --- ## 📋 示例输出汇总 | 命令 | 说明 | |--------------------------------|--------------------------------| | `cat /proc/sys/fs/file-max` | 查看系统最大文件描述符 | | `ulimit -n` | 查看当前 shell 的最大文件 | | `ulimit -Sn / ulimit -Hn` | 查看软限制 / 硬限制 | | `cat /proc/sys/fs/file-nr` | 查看当前已使用 FD 量 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值