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