我有这种特殊情况,我需要一台机器来服务大量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 +连接一样处理?
提前谢谢。
答案 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,但很快 我们每天都在推动它。进入的连接 从来没有出去过。