可以在任何 Linux 系统(特别是 ubuntu 10.04)中使用的文件描述符的上限是多少?
我使用的是 Ubuntu 10.04(64 位),我的服务器 CPU 架构是 x86_64,客户端是 i686。现在我已经将我的 fd-limit 增加到 400000。
- 使用大号可能会产生什么副作用。文件描述符?
- 我怎么知道没有。任何进程使用的文件描述符?
谢谢
可以在任何 Linux 系统(特别是 ubuntu 10.04)中使用的文件描述符的上限是多少?
我使用的是 Ubuntu 10.04(64 位),我的服务器 CPU 架构是 x86_64,客户端是 i686。现在我已经将我的 fd-limit 增加到 400000。
谢谢
您想查看 /proc/sys/fs/file-max 。
从最近的 linux/Documentation/sysctl/fs.txt:
文件最大值和文件编号:
内核动态分配文件句柄,但它还没有再次释放它们。
file-max 中的值表示 Linux 内核将分配的最大文件句柄数。当您收到大量有关文件句柄用完的错误消息时,您可能希望增加此限制。
历史上,file-nr 中的三个值分别表示分配的文件句柄数、已分配但未使用的文件句柄数和最大文件句柄数。Linux 2.6 总是报告 0 作为空闲文件句柄的数量——这不是错误,它只是意味着分配的文件句柄的数量与使用的文件句柄的数量完全匹配。
使用 printk 报告分配比 file-max 更多的文件描述符的尝试,查找“VFS:达到文件最大限制”。
2.6 内核使用经验法则file-max
根据系统中的内存量进行设置。来自fs/file_table.c
2.6 内核的片段:
/*
* 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%)
每个文件描述符都会占用一些内核内存,因此在某些时候您会耗尽它。话虽如此,对于使用基于事件(Linux 上的 epoll)服务器架构的服务器部署而言,多达十万个文件描述符并非闻所未闻。所以400k也不是完全不合理。
对于第二个问题,请参见 /proc/PID/fd/ 或 /proc/PID/fdinfo 目录。