11

需要根据我自己的服务器需求“计算”最佳 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"

感谢任何最新的参考。

4

2 回答 2

15

因为fs.file-max,我认为在几乎所有情况下,您都可以不理会它。如果您正在运行某种非常繁忙的服务器并且实际上用完了文件句柄,那么您可以增加它 - 但是您需要增加它的值将取决于您正在运行的服务器类型和负载就可以了。一般来说,您只需要增加它,直到您不再用完文件句柄,或者直到您意识到您需要更多内存或更多系统来处理负载。通过将 file-max 降低到默认值以下来“调整”事物的收益是如此之小,以至于不值得考虑——我的手机在 fs-max 值为 83588 时工作正常。

顺便说一句,现代内核已经使用经验法则根据系统中的内存量设置文件最大值;从fs/file_table.c2.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_filesfs.file-max; 对于每 1MB 的内存,这最终约为 100。

ulimits 当然是关于限制用户或进程分配的资源。如果您有多个用户或其他类似情况,那么您可以决定如何分配系统资源并限制内存使用、进程数等。关于您可以设置的限制的详细信息的权威指南是setrlimit man页面(当然还有内核源代码)。

于 2011-05-31T07:14:47.077 回答
2

通常,像 Oracle 或 SAP 这样的大型系统建议使用非常高的限制,以免受到它的影响。我只能推荐使用这种方法。数据结构将被动态分配,因此只要您不需要它们,它们就不会耗尽内存。如果你真的需要它们,它不会帮助你限制它们,因为如果达到限制,应用程序通常会崩溃。

fs.file-max = 6815744 # 这大致是 70GB RAM 系统的默认限制

对于用户 rlimits (nofile) 也是如此,您将使用 65535。

请注意,这两个建议仅适用于具有关键应用程序和受信任外壳用户的专用服务器。多用户交互式 shell 主机必须具有限制性最大设置。

于 2014-02-18T02:56:02.183 回答