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系统下的最大文件描述符限制》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章