当前位置: 首页 > 面试题库 >

linux文件描述符限制如何工作?

云宜人
2023-03-14
问题内容

有人告诉我,我的服务器拒绝在特定端口接受客户端网络连接可能是由于缺少文件描述符所致。我查找了所有内容,并在此处阅读了有关内容:http
:
//www.netadmintools.com/art295.html

所以我测试了我的系统,我得到了:

cat /proc/sys/fs/file-nr
1088    0   331287

这是什么意思?我的限制很高,但是我有0个可用的文件描述符?为什么?如何为我的服务器解决此问题?

即使关闭服务器后,第二列实际上仍为0,甚至在引导后也始终为0!


问题答案:

您想查看/ proc / sys / fs / file-max

从最近的linux / Documentation / sysctl / fs.txt中:

file-max和file-nr:

内核动态分配文件句柄,但到目前为止,它并没有再次释放它们。

file-max中的值表示Linux内核将分配的最大文件句柄数。当您收到许多有关文件句柄用尽的错误消息时,您可能希望增加此限制。

从历史上看,file-nr中的三个值表示已分配的文件句柄数,已分配但未使用的文件句柄数以及最大文件句柄数。Linux
2.6始终将0表示为空闲文件句柄数-这不是错误,这仅表示分配的文件句柄数与使用的文件句柄数完全匹配。

尝试分配比file-max更大的文件描述符的尝试由printk报告,请查找“ VFS:已达到file-max限制”。

编辑:根本的错误可能不是系统用尽了全局文件描述符,而仅仅是您的进程。问题似乎可能是select的最大大小限制。



 类似资料:
  • 当使用了大量虚拟主机,而且每个主机又使用了不同的日志文件时,Apache可能会遭遇文件描述符(有时也称为文件句柄)耗尽的困境。Apache使用的文件描述符总数如下:每个不同的错误日志文件一个、每个其他日志文件指令一个、再加10-20个作为内部使用。Unix操作系统限制了每个进程可以使用的文件描述符数量。典型上限是64个,但可以进行扩充,直至到达一个很大的硬件限制为止(hard-limit)。 尽管

  • 文件描述符 Linux很重要的设计思想就是一切皆文件,网络是文件,键盘等外设也是文件,很神奇吧?于是所有资源都有了统一的接口,开发者可以像写文件那样通过网络传输数据,我们也可以通过/proc/的文件看到进程的资源使用情况。 内核给每个访问的文件分配了文件描述符(File Descriptor),它本质是一个非负整数,在打开或新建文件时返回,以后读写文件都要通过这个文件描述符了。 应用 我们想想操作

  • 文件描述符接口 函数 int  fd_new (void)   分配文件描述符   struct dfs_fd *  fd_get (int fd)   获取文件描述结构   void  fd_put (struct dfs_fd *fd)   放置文件描述符   int  fd_is_open (const char *pathname)   判断文件是否已被打开   int  select (

  • 问题内容: 有没有办法在原始文件描述符而不是FILE *上执行ftell()的操作(返回文件中的当前位置)?我认为应该有,因为您可以使用lseek()查找原始文件描述符。 我知道我可以使用fdopen()创建与文件描述符相对应的FILE *,但我宁愿不这样做。 问题答案: 只需使用:

  • 问题内容: 我正在Linux C项目上工作,无法使用文件描述符。 我有一个孤立的文件描述符(文件是open()然后是unlink(),但是fd仍然很好),它具有只写权限。原始备份文件具有完全权限(使用S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH创建),但是可惜文件是用O_WRONLY打开的。是否可以复制文件描述符并将副本更改为O_RDWR? 伪代码: 提前致谢!-安德

  • 处理文件描述符 尽管很不像,但是在大多操作系统中,标准输入输出流 stdin 和 stdout 虽然叫做「流」,但它们都有文件的接口。我们同样也会将它们实现成为文件。 但是不用担心,作为文件的许多功能,stdin 和 stdout 都不会支持。我们只需要为其实现最简单的读写接口。 进程打开的文件 操作系统需要为进程维护一个进程打开的文件清单。其中,一定存在的是 stdin stdout 和 std