【问题标题】:Upper limit of file descriptor in LinuxLinux中文件描述符的上限
【发布时间】:2012-10-09 20:49:18
【问题描述】:

可以在任何Linux系统(特别是ubuntu 10.04)中使用的文件描述符的上限是多少?

我使用的是 Ubuntu 10.04(64 位),我的服务器 CPU 架构是 x86_64,客户端是 i686。现在我已将 fd-limit 增加到 400000。

  • 使用大号可能会产生什么副作用。文件描述符?
  • 我怎么知道号码。任何进程使用的文件描述符?

谢谢

【问题讨论】:

  • 您想要每个进程或系统范围的 fd 限制吗?增加fd限制的原因是什么?
  • 可能两者兼而有之。我只希望我的客户端应用程序,即 httperf 以更高的速率生成请求,例如 30000 conn/sec 持续 300 秒
  • 好吧,在这种情况下,您最好使用 ulimit 来设置每个进程的 fd 限制,正如我的回答,您可以使用 file-max 或 file-nr(根据哪个更适合您) 用于系统范围的 fd 限制。如果要运行多个进程,您可能还想增加 /proc/sys/kernel/pid_max 限制。

标签: linux


【解决方案1】:

您想改为查看 /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:已达到文件最大限制”。

2.6 内核使用经验法则根据系统中的内存量设置file-max。 2.6内核中来自fs/file_table.c的sn-p:

/*
 * One file with associated inode and dcache is very roughly 1K.
 * Per default don't use more than 10% of our memory for files. 
 */ 

n = (mempages * (PAGE_SIZE / 1024)) / 10;
files_stat.max_files = max_t(unsigned long, n, NR_FILE);

files_stat.max_files 是fs.file-max 的设置。最终每 1MB 的内存大约有 100 个。(10%)

【讨论】:

  • 在这个文件/proc/sys/fs/file-max中,我把file-max的值增加到了400000。我可以再增加一点吗?如果是,那么多少钱?
  • 您需要将其增加到的值将取决于您正在运行的服务器类型及其负载。一般来说,你应该增加它,直到你不再用完文件句柄。查看更新的答案了解更多详情。
  • 谢谢询问,很有帮助
【解决方案2】:

每个文件描述符都会占用一些内核内存,所以在某些时候你会耗尽它。话虽如此,对于使用基于事件(Linux 上的 epoll)服务器架构的服务器部署而言,多达十万个文件描述符并非闻所未闻。所以400k也不是完全不合理。

关于第二个问题,请参见 /proc/PID/fd/ 或 /proc/PID/fdinfo 目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2013-05-30
    • 2023-03-23
    相关资源
    最近更新 更多