修改fs.file-max 、soft nofile、fs.nr_open這三個參數的值來修改進程能打開的最大文件描述符數量
fs.file-max (系統級別參數):該參數描述了整個系統可以打開的最大文件數量。但是root用戶不會受該參數限制(比如:現在整個系統打開的文件描述符數量已達到fs.file-max ,此時root用戶仍然可以使用ps、kill等命令或打開其他文件描述符) 通過 cat /proc/sys/fs/file-max 查看
soft nofile(進程級別參數):限制單個進程上可以打開的最大文件數。只能在Linux上配置一次,不能針對不同用戶配置不同的值;通過 cat /etc/security/limits.conf 查看
fs.nr_open(進程級別參數):限制單個進程上可以打開的最大文件數。可以針對不同用戶配置不同的值 通過 cat /proc/sys/fs/nr_open 查看
如果想加大soft nofile,那么hard nofile參數值也需要一起調整。如果因為hard nofile參數值設置的低,那么soft nofile參數的值設置的再高也沒有用,實際生效的值會按照二者最低的來。
如果增大了hard nofile,那么fs.nr_open也都需要跟著一起調整(fs.nr_open參數值一定要大于hard nofile參數值)。如果不小心把hard nofile的值設置的比fs.nr_open還大,那么后果比較嚴重。會導致該用戶無法登錄,如果設置的是*,那么所有用戶都無法登錄
如果加大了fs.nr_open,但是是用的echo "xxx" > ../fs/nr_open命令來修改的fs.nr_open的值,那么剛改完可能不會有問題,但是只要機器一重啟,那么之前通過echo命令設置的fs.nr_open值便會失效,用戶還是無法登錄。所以非常不建議使用echo的方式修改內核參數!!!
正確設置方法:
vim /etc/sysctl.conf
fs.file-max=1100000 // 系統級別設置成110萬,多留點buffer
fs.nr_open=1100000 // 進程級別也設置成110萬,因為要保證比 hard nofile大
使上面的配置生效sysctl -p
vim /etc/security/limits.conf
// 用戶進程級別都設置成100完
soft nofile 1000000
hard nofile 1000000