最大化MongoDB连接

时间:2016-08-19 21:35:29

标签: linux mongodb ubuntu

我有这种特殊情况,我需要一台机器来服务大量MongoDB数据库(例如10k +),并且每个用户都应该能够直接连接到它。 我们的机器非常强大,它运行一段时间,直到几天,它开始引起一些问题。

在某些时候,用户无法登录,我从mongoS日志中获取此信息:

2016-08-19T18:08:16.667+0000 I NETWORK  [mongosMain] pthread_create failed: errno:11 Resource temporarily unavailable

我试图明智地更改MongoDB的大多数参数,但是没有运气:

net.netfilter.nf_conntrack_max is 524288
fs.file-max is 128000
kernel.pid_max is 288000

/etc/security/limits.d/90-nproc.conf有:     * soft nproc 128000     * hard nproc 128000

/etc/init/mongos.conf有:

limit fsize unlimited unlimited
limit cpu unlimited unlimited
limit as unlimited unlimited
limit nofile 512000 512000
limit rss unlimited unlimited
limit nproc unlimited unlimited
limit memlock unlimited unlimited

但仍然没有运气。

有没有办法像100K +连接一样处理?

提前谢谢。

2 个答案:

答案 0 :(得分:1)

我最终得到了这些设置,这似乎解决了问题,虽然生成了一个新的设备:机器现在支持超过100K的连接,但似乎它最终消耗了大量的RAM而不值得。我们最终添加了服务器来解决最终问题。

万一有人需要它:

net.netfilter.nf_conntrack_max is 524288
net.netfilter.nf_conntrack_tcp_timeout_established=600
fs.file-max is 524288
kernel.pid_max is 524288
net.netfilter.nf_conntrack_tcp_timeout_time_wait=1
net.ipv4.tcp_tw_recycle=0
vm.max_map_count=524288

希望将来帮助某人。

答案 1 :(得分:0)

嗨,看起来linux服务器正在资源限制下运行。

有一篇关于linux调优的好文章接受高数字f连接here

  

连接跟踪

     

我们看到的下一个参数是连接跟踪。这是一个   使用iptables的副作用。因为iptables需要允许双向   需要建立的HTTP和ssh连接之间的通信   跟踪建立的连接,并将它们放在一起   进入连接跟踪表。这个表增长了。并且成长。和   增长。

     

您可以使用sysctl查看此表的当前大小   net.netfilter.nf_conntrack_count及其使用sysctl的限制   net.nf_conntrack_max。如果count超过max,你的linux系统会   停止接受新的TCP连接,你永远不会知道这一点。   发生这种情况的唯一迹象是隐藏了一条线   / var / log / syslog中的某个地方说你没连接   跟踪条目。一线,一次,第一次发生时。

     

更好的指示是,计数是否总是非常接近最大值。你可能会   我想,“嘿,我们确定了最大限度。”但是你错了。

     

你需要做什么(或至少你最初的想法)是   增加最多

     

请记住,这个值越大,RAM越多   内核将用于跟踪这些条目。可以使用的RAM   按你的申请。

     

我们开始沿着这条路走下去,增加了net.nf_conntrack_max,但很快   我们每天都在推动它。进入的连接   从来没有出去过。