Linux中文件描述符的上限

Linux中文件描述符的上限,linux,Linux,任何Linux系统(特别是ubuntu 10.04)都可以使用的文件描述符的上限是多少 我使用的是Ubuntu 10.04(64位),服务器的CPU架构是x86_64,客户端的CPU架构是i686。现在我已经将我的fd限制提高到400000 使用大量文件描述符可能会有什么副作用 我如何知道任何进程使用的文件描述符的编号 Thnx您希望查看/proc/sys/fs/file max 从最新的linux/Documentation/sysctl/fs.txt: 文件最大值和文件编号: 内核动态地

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

我使用的是Ubuntu 10.04(64位),服务器的CPU架构是x86_64,客户端的CPU架构是i686。现在我已经将我的fd限制提高到400000

  • 使用大量文件描述符可能会有什么副作用
  • 我如何知道任何进程使用的文件描述符的编号

Thnx

您希望查看/proc/sys/fs/file max

从最新的linux/Documentation/sysctl/fs.txt:

文件最大值和文件编号:

内核动态地分配文件句柄,但目前还没有 再次释放他们

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

历史上,文件nr中的三个值表示 已分配的文件句柄,已分配但未使用的文件数 句柄,以及文件句柄的最大数目。Linux 2.6始终 将0报告为可用文件句柄数--这不是错误, 这仅仅意味着分配的文件句柄的数量是精确的 匹配使用的文件句柄数

报告尝试分配的文件描述符多于文件最大值 使用printk,查找“VFS:已达到文件最大限制”

2.6内核使用经验法则根据系统内存量设置
file max
。2.6内核中的
fs/file_table.c
中的一段代码:

/*
 * 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\u stat.max\u files
fs.file max
的设置。每1MB内存大约有100个(10%)

每个文件描述符都会占用一些内核内存,所以在某个时候会耗尽它。也就是说,对于使用基于事件(Linux上的epoll)服务器体系结构的服务器部署,多达十万个文件描述符并非闻所未闻。因此,40万美元并非完全不合理


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

您想要每个进程还是系统范围的fd限制?增加fd限制的原因是什么?可能两者都有。我只希望我的客户端应用程序ie httperf以更高的速率生成请求,比如30000 conn/sec,持续300秒。在这种情况下,您可以使用ulimit设置每个进程的fd限制,正如我的回答中所述,您可以使用file max或file nr(基于哪个更适合您)设置系统范围的fd限制。如果要运行多个进程,可能还需要增加
/proc/sys/kernel/pid_max
限制。在这个文件/proc/sys/fs/file max中,我已将文件max值增加到400000。我可以增加更多吗?如果是,那么增加多少?您需要将其增加到的值将取决于您正在运行的服务器类型和负载。通常,您应该增加它,直到不再用完文件句柄为止。查看更新的答案以了解更多详细信息。Thanx askmish,这很有帮助