Answers:
我怀疑此限制的主要原因是为了避免过多的内存消耗(每个打开的文件描述符都使用内核内存)。它也可以防止错误的应用程序泄漏文件描述符并消耗系统资源。
但是,鉴于现代系统与10年前的系统相比有多少荒唐的RAM,我认为今天的默认值非常低。
在2011年,Linux上文件描述符的默认硬限制从1024增加到4096。
某些软件(例如MongoDB)使用的文件描述符比默认限制更多。MongoDB的人们建议将该限制提高到64,000。我已经将rlimit_nofile
300,000用于某些应用程序。
只要将软限制保持为默认值(1024),增加硬限制可能就相当安全了。程序必须调用setrlimit()
才能将其限制提高到软限制之上,并且仍然受到硬限制的限制。
另请参阅一些相关问题:
从技术上讲,它限制为无符号长整数(C Lang)的最大值,即4,294,967,295
参考:fs.h
文件
/* And dynamically-tunable limits and defaults: */
struct files_stat_struct {
unsigned long nr_files; /* read only */
unsigned long nr_free_files; /* read only */
unsigned long max_files; /* tunable THIS IS OUR VALUE */
};
安静一点,但这应该可以帮助其他人获得此问题的答案。在Linux中,打开文件的实际限制也可以使用进程可以打开的文件描述符的最大数目来计算。
我已经看到限制因系统而异。在getlimit手册页中,您可以看到RLIMIT_NOFILE-1
内部指定了限制。
要检查RLIMIT_NOFILE值,可以使用以下语句获取元组
python -c "import resource; print(resource.getrlimit(resource.RLIMIT_NOFILE))"
元组将结果返回为(Soflimit,hardlimit)。对我来说,在多个系统上运行的结果如下
(1024, 1048576) # on UBUNTU linux
(65536, 65536) # on amazon linux
(1024, 9223372036854775807) # on macos
注意:9223372036854775807这个数字只是表示无穷大。在达到此目标之前,您将始终达到其他资源限制。如果您确实要修改系统上的硬限制,则必须修改内核参数。