需要根据我自己的服务器需求“计算”最佳ulimit和fs.file-max值。 请不要与“如何在各种Linux发行版中设置这些限制”问题发生冲突。
我在问:
实际上我可以在网上找到一些旧参考: http://www.faqs.org/docs/securing/chap6sec72.html “对于我们拥有的每4M RAM,一些合理的事情就像256一样:对于具有128 MB RAM的机器,将其设置为8192 - 128/4 = 32 32 * 256 = 8192”
感谢任何最新的参考。
答案 0 :(得分:14)
对于fs.file-max
,我认为在几乎所有情况下你都可以不管它。如果您正在运行某种非常繁忙的服务器并且实际上没有文件句柄,那么您可以增加它 - 但是将其增加到的所需值将取决于您运行的服务器类型和负载就是这样。通常,您只需要增加它,直到您不再耗尽文件句柄,或者直到您意识到需要更多内存或更多系统来处理负载。通过将文件最大值降低到默认值以下来“调整”事物的收益是如此之小,以至于不值得考虑 - 我的手机在fs-max值为83588时工作正常。
顺便说一句,现代内核已经使用经验法则根据系统中的内存量设置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_files
是fs.file-max
的设置;每1MB的内存最终会达到100左右。
ulimits当然是关于限制用户或进程分配的资源。如果您有多个用户或其他类似情况,那么您可以决定如何划分系统资源并限制内存使用,进程数等。您可以设置的限制详细信息的权威指南是{{ 3}}(当然还有内核源代码)。
答案 1 :(得分:2)
通常,像Oracle或SAP这样的大型系统会建议一个非常高的限制,以免受到它的影响。我只能建议使用这种方法。数据结构将动态分配,因此只要您不需要它们,它们就不会耗尽内存。如果您确实需要它们,它将无法帮助您限制它们,因为如果达到限制,应用程序通常会崩溃。
fs.file-max = 6815744#这大致是70GB RAM系统的默认限制
对于用户rlimits(nofile)也是如此,您将使用65535。
请注意,这两个建议仅适用于具有关键应用程序和可信shell用户的专用服务器。多用户交互式shell主机必须具有限制性最大设置。