select中文件描述符上限与1024的关系

一、两个1024

  1. select中存放文件描述符的数组大小FD_SETSIZE为1024
  2. 进程的文件描述符上限默认是1024,正是因为这个原因,select设计时才把数组大小设计为1024

二、问题来了

进程的文件描述符上限是可以手动修改的

# 查看进程的文件描述符上限
ulimit -n

# 修改进程的文件描述符上限为2048,临时修改,只对当前shell有效
ulimit -SHn 2048

# 永久修改:编辑/etc/security/limits.conf
vi /etc/security/limits.conf
* hard nofile 65536
* soft nofile 65536

但是select的数组大小改不了 (╯‵□′)╯︵┻━┻,要改只能重新编译内核

三、扩展一下

除了每个进程的文件描述符有上限以外,系统还有一个总的上限,默认是100262

# 查看系统的文件描述符上限,方法一
sysctl -a | grep file-max

# 查看系统的文件描述符上限,方法二
cat /proc/sys/fs/file-max
# 修改系统的文件描述符上限
sysctl -w fs.file-max=2048
# 使修改生效
sysctl -p

参考

《select、poll、epoll的文件描述符上限问题》
《linux文件描述符限制及使用详解》
《并发时-修改Linux系统下的最大文件描述符限制》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值