根据我的服务器需求,“计算”最佳的ulimit和fs.file-max值。

13

我需要根据自己的服务器需求“计算”最佳 ulimit 和 fs.file-max 值。

请不要与“如何在不同的 Linux 发行版中设置这些限制”的问题产生冲突。

我想知道:

  1. 是否有任何好的指南可以详细解释 ulimit 使用的参数?(> 2.6 系列内核)
  2. 是否有任何好的指南可以显示 fs.file-max 使用度量?

实际上,我在网上找到了一些旧的参考资料:

http://www.faqs.org/docs/securing/chap6sec72.html

“每个 4M RAM 可以合理地设置为 256:即对于一个拥有 128 MB RAM 的机器,将其设置为 8192 - 128/4=32 32*256=8192”。

非常感谢任何最新的参考资料。


忘了提到我需要技术文章。 - Kunthar
2个回答

16
对于fs.file-max,我认为在几乎所有情况下,您都可以不用管它。如果您正在运行某种非常繁忙的服务器,并且实际上已经用完了文件句柄,则可以增加它--但是您需要增加的值将取决于您正在运行的服务器类型以及其负载。通常,您只需要增加它,直到您不再用完文件句柄,或者直到您意识到需要更多内存或更多系统来处理负载。通过将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_filesfs.file-max的设置;每1MB内存大约为100个。

而ulimits则是限制用户或进程分配的资源。如果您有多个用户或类似情况,则可以决定如何划分系统资源并限制内存使用、进程数量等。关于可以设置的限制的详细信息,最权威的指南是setrlimit手册页面(当然也可以参考内核源代码)。


1
要获取PAGE_SIZE值,请使用命令“getconf PAGE_SIZE”,通常为4096。 - Gnought

2
通常像Oracle或SAP这样的大型系统建议设置非常高的限制,以便永远不会受到影响。我只能建议使用这种方法。数据结构将被动态分配,因此只要您不需要它们,它们就不会使用内存。如果您实际上需要它们,限制它们将没有帮助,因为如果达到限制,应用程序通常会崩溃。
fs.file-max = 6815744 # 这大约是70GB RAM系统的默认限制
对于用户rlimits(nofile),65535是相同的。
请注意,这两个建议仅适用于具有关键应用程序和可信shell用户的专用服务器。多用户交互式shell主机必须具有限制性的最大设置。

你从哪里得出 1MB 容量可以存储 97 个文件的比率呢?另外感谢你的回答 :) - greggles
3
@greggles 我其实不记得了,可能是来自某个Linux供应商的Oracle或SAP尺寸指南。实际公式是“基于1k /文件句柄使用10%的内存”,可以在此处看到:https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/fs/file_table.c#n319 - eckes
1
准确来说,应该是65GB的内存,文件最大值=file-max=6815744 <-- 计算公式为(6510241024*1024/1k)*10% - Gnought

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