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

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