Featured image of post 調整 Linux 系統的最大打開的檔案數量

調整 Linux 系統的最大打開的檔案數量

防止系統出現 `Too many open files` 的錯誤,提高系統的效能。

最後更新
約 518 字

前言

Linux 系統的預設最大打開的檔案數量 (nofile) 只有 1024 個,這將影響到系統的效能。在高負載的情況下,各種程式都可能會出現 Too many open files 的錯誤,這是因為系統無法打開更多的檔案。

在 Linux 系統中,有一句名言:「一切皆檔案」,這意味著在 Linux 系統中,所有的資源都是以檔案的形式存在的,包括硬體設備、網路設備、進程、記憶體等等,所以在 Linux 系統中,打開檔案的數量是非常重要的。

特別是在使用 PVE 或者 ESXi 等虛擬化平台時,會更容易出現 Too many open files 的錯誤,這是因為虛擬化平台需要打開大量的檔案來管理虛擬機器。

優化方法

設定最大打開的檔案數量

調整最大打開的檔案數量,這將臨時生效,重啟後失效。

1
2
echo 16777216 > /proc/sys/fs/nr_open
echo 16777216 > /proc/sys/fs/file-max

修改 /etc/sysctl.conf,加入以下內容,然後執行 sysctl -p 即可永久生效。

1
2
fs.nr_open = 16777216
fs.file-max = 16777216

修改 /etc/security/limits.conf,加入以下內容,然後重新登入後生效。

1
2
3
4
*   soft    nofile  16777216
*   hard    nofile  16777216
*   soft    nproc   unlimited
*   hard    nproc   unlimited

以上的數值 16777216 (算式: 2^24) 是根據系統的實際情況來設定的,可以根據實際情況進行調整。

file-max 的預設上限數值是 1048576 (算式: 2^20),nofile 的上限無法超過 file-max 的數值。

所以如果使用 ulimit 指令時出現 Permission denied 錯誤,這並不是真的沒有權限,而是因為 file-max 的數值太小。

參考資料

最佳化 10Gbps+ 網卡的系統效能


使用 Hugo 建立
主題 StackJimmy 設計