Linux中文件描述符的上限

15

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

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

  • 使用大量文件描述符可能会导致什么可能的副作用?
  • 我如何知道任何进程使用的文件描述符数量?

谢谢


你想要每个进程还是整个系统的文件描述符限制?增加文件描述符限制的原因是什么? - askmish
可能两者都可以。我只想让我的客户端应用程序,即httperf,在300秒内以更高的速率生成请求,比如说每秒30000个连接。 - nebi
在这种情况下,您可以使用ulimit来设置每个进程的fd限制,而且如我的答案所述,您可以使用file-max或file-nr(根据哪一个更适合您)来设置系统范围内的fd限制。如果您将要运行多个进程,您可能还需要增加/ proc / sys / kernel / pid_max限制。 - askmish
2个回答

14
你应该查看/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 limit reached”。
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_stat.max_filesfs.file-max 的设置。这最终会因为每1MB的内存而约为100个文件。(10%)


在文件/proc/sys/fs/file-max中,我已将file-max值增加到400000。我可以再增加吗?如果可以,最多可以增加多少? - nebi
你需要增加的值取决于你运行的服务器类型和负载情况。一般来说,你应该将其增加到不再耗尽文件句柄为止。查看更新后的答案以获取更多细节。 - askmish

4

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接