Linux

如何知道我們是否達到了 fs.file-max 的最大值

  • May 5, 2020

在我們的 Linux RHEL 伺服器fs.file-max上設置為100000

sysctl -p | grep fs.file-max
fs.file-max = 100000

據我了解,file-max核心參數指的是打開的文件描述符,並file-nr為我們提供了目前打開的文件描述符的數量。但lsof列出所有打開的文件,包括不使用文件描述符的文件——例如目前工作目錄、記憶體映射庫文件和可執行文本文件。

以下是否lsof真的很好地表明我們已經達到了fs.file-max價值?

lsof | wc -l

或者

[[ `lsof | wc -l` -gt 100000 ]] && echo "please increase the fs.file-max"

其他相關連結 -如何顯示打開的文件描述符但不使用 lsof 命令

這個

[[ `lsof | wc -l` -gt 100000 ]] && echo "please increase the fs.file-max"

會產生誤導。請參閱下面的參考資料。

基於RHEL 5 Tuningcat /proc/sys/fs/file-nr可以使用 的輸出。我們可以比較輸出的第一個最後一個欄位。第一個欄位顯示分配的文件句柄總數,最後一個欄位顯示可以分配的最大文件句柄。所以設置一個檢查,一旦達到 90%,就會顯示一個警告:

[[ $(echo "$(cat /proc/sys/fs/file-nr | cut -f1) / $(cat /proc/sys/fs/file-nr | cut -f3) * 100" | bc -l) -ge 90 ]] \
 && echo "90% reached. Please increase the fs.file-max"

lsoffile-nr輸出之間的一些區別:

file-max 核心參數指的是打開的文件描述符,而 file-nr 為我們提供了目前打開的文件描述符的數量。但是 lsof 會列出所有打開的文件,包括不使用文件描述符的文件——例如目前工作目錄、記憶體映射庫文件和可執行文本文件。

參考

引用自:https://unix.stackexchange.com/questions/584591