Linux 文件句柄的这些技术内幕,只有 1% 的人知道

image

1. 缘起

某个月朗风清的晚上,正在公司对面的深大操场跑步,突然接到同事发来的消息,他发现某机器上的文件句柄使用量有十一万多个(下面输出中的第一个字段)

image


但是通过运维常用的lsof命令算了下,相差甚远。

image


似乎很不科学,这里看到的数据不到1万个,剩下10多万的文件句柄哪里去了呢(系统完整性检查已排除黑客入侵可能性)

2. 文件描述符和文件句柄的故事

先看一张著名的图吧

image


这里我们先区分好两个概念:文件描述符和文件句柄

简单来说,每个进程都有一个打开的文件表(fdtable)。表中的每一项是struct file类型,包含了打开文件的一些属性比如偏移量,读写访问模式等,这是真正意义上的文件句柄。

文件描述符是一个整数。代表fdtable中的索引位置(下标),指向具体的struct file(文件句柄)。

3. file-nr 文件里的值是文件描述符还是文件句柄?

顺着内核代码找一下:

image

可以看出file-nr指标是由proc_nr_files函数处理,该函数最终其实是读取了nr_files全局变量

原文链接 

猜你喜欢

转载自blog.csdn.net/weixin_40581617/article/details/81185467