在安装 mongo db 的过程中,我遇到了一个警告,上面写着
软 rlimits 太低。rlimits 设置为 1024 个进程、64000 个文件。进程数应至少为 32000:文件数的 0.5 倍。
我发现很多网站描述了如何提高系统和用户的打开文件限制,但我还没有发现我可以/应该在多大程度上增加这些值。
这些值是否依赖于服务器资源?如果是,我如何确定应该为系统设置最大值?
显然,有两个设置对于 mongodb 的性能很重要(打开文件限制和进程数)。我如何正确调整进程数?如何检查我是否使用了过高的值?
答案1
我认为它不是在告诉你绝对意义上的进程数量太少。它告诉你比率应该调整 MaxProcesses:MaxOpenFiles。
您需要根据硬件、预期负载和其他资源需求来决定对数据库和其他应用程序施加的限制。
您可以使用cat /proc/sys/fs/file-max
来找出整个服务器可以同时打开的最大文件数。Linux 对进程数没有固有限制,但如果该数字相对于内核数太大,性能可能会受到影响。您可以使用 来找出服务器当前允许的最大线程数(如果有)cat /proc/sys/kernel/threads-max
。您还可以将更高或更低的值写入此文件以调整性能。现在您知道了服务器的整体限制。
接下来,估计您期望的数据库同时连接数的典型值和最大值。通常,您需要将每个用户的文件限制设置为足够大,以便至少轻松处理典型负载。最有可能的是,您可以选择一个大于最大预期连接数的值,但只有您才能决定这是否适合您的整体使用和服务器约束。您可以选择一个等于 max-files 或小于 max-files 的 max-processes per user 值,但 mongo 警告您不要将 max-processes per user 设置为小于 max-files per user 的一半,大概是因为每个连接都需要一个进程(线程)和一个文件。
基本上,您只需要确保不要过于慷慨(冒着资源耗尽的风险)和过于吝啬(冒着应用程序瓶颈的风险)。通常,您首先对这些限制进行初步估计,然后计划在必要时根据实际使用和性能对其进行调整。
对这两个资源限制进行估算后,使用 ulimit 设置最大文件数和最大进程数每个用户。稍后,您可以根据实际使用情况和性能调整这些值。