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

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

在我们的 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 命令

答案1

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

会产生误导。请参阅下面的参考。

基于RHEL 5 调优cat /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"


lsof和输出之间的一些区别file-nr

file-max 内核参数指的是打开的文件描述符,file-nr 为我们提供了当前打开的文件描述符的数量。但 lsof 列出了所有打开的文件,包括不使用文件描述符的文件,例如当前工作目录、内存映射库文件和可执行文本文件。

参考

相关内容