字體:  

ulimit 應用 - 如何加大 Linux 系統的 open file 上限

99770 發表於: 2018-10-18 15:35 來源: ADJ網路控股集團


Linux系統默認open files數目為1024, 有時應用進程會報Too many open files的錯誤,是因為open files 數目不夠。這就需要修改ulimit和file-max。特別是提供大量靜態文檔訪問的web服務器,緩存服務器(如squid), 更要注意這個問題。

ulimit 是一個 shell(這裡使用的是 bash) 內置命令,可以通過 type ulimit 驗證。

-n 即表示查看或者設置 open file(s) 的限制,在 ulimit 中,每個限制都有兩種類型:

    -S, soft limit, 軟限制,用戶可以上調軟限製到硬限制
    -H, hard limit, 硬限制,非 root 用戶不能修改

如果沒有指明,則同時修改軟限制和硬限制。
修改 ulimit

修改分為臨時修改和永久修改,臨時修改只對當前 session 有效,登出和重啟後都恢復系統設置。

(A)臨時修改使用 ulimit 命令,以修改 open file 為例。

# ulimit -n 1024000
# ulimit -n
1024000

(B)永久修改需要修改 /etc/sysctl.conf /etc/security/limits.conf

通過一番搜索,發現 open file kernel 級別有 2 個配置,分別是:

fs.nr_open,進程級別
fs.file-max,系統級別

fs.nr_open 默認設置的上限是 1048576,所以用戶的 open file(s) 不可能超過這個上限。

# sysctl -w fs.nr_open=10000000
# ulimit -n 10000000
# ulimit -n
10000000

修改後即可設置更大的 open file(s) 了。

1.修改file-max
同樣,對於 kernel 參數的修改,sysctl 命令修改的是當前運行時,如果需要永久修改, 則將配置添加到 /etc/sysctl.conf 中,例如:

QUOTE:


# echo "fs.nr_open = 10000000" >> /etc/sysctl.conf
# echo "fs.file-max = 11000000" >> /etc/sysctl.conf
# sysctl -p

注意:fs.nr_open 總是應該小於等於 fs.file-max。

如果要查看當前打開的文件數,使用下面的命令:

# sysctl fs.file-nr
fs.file-nr = 1760 0 11000000

不過,增大這些值意味著能夠打開更多的文件(在Linux 中,everything is file,包括socket),但是同時也意味著消耗更多的資源,所以基本上在物理機上才會遇到這種問題。

2.修改ulimit的open file,系統默認的ulimit對文檔打開數量的限制是1024

QUOTE:

# vi /etc/security/limits.conf       //加入以下配置,重啟即可生效
* soft nofile 10000000
* hard nofile 10000000


這樣就可以囉~

參考資料:
http://www.chengweiyang.cn/2015/11/14/how-to-enlarge-linux-open-files-upper-cell/