在我们的 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 列出了所有打开的文件,包括不使用文件描述符的文件,例如当前工作目录、内存映射库文件和可执行文本文件。
看参考