2016-08-19 35 views
2

私は非常に特殊な状況で、多数のMongoDBデータベース(10k +など)を扱うために1台のマシンが必要で、すべてのユーザーが直接接続できる必要があります。 私たちのマシンはかなり強力で、数日前から問題が発生し始めてから、しばらくの間、正常に動作していました。ある時点のユーザーでMongoDB接続の最大化

はもうログインできないと私はmongoSログからこれを取得:

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

私はMongoDBは賢明とSO賢明なほとんどのパラメータを変更しようとしましたが、ない幸運ました:

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

/etc/security/limits.d/90-nproc.confがあります *ソフトNPROC 128000 *ハード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

こんにちは、linuxサーバーがリソース制限で動作しているようです。

接続here

接続追跡

fをした私たちが見て次のパラメータ接続の追跡を高い数値を受け入れるようにLinuxのチューニングについての素晴らしい記事があります。これはiptablesを使用する副作用 です。 iptablesは、確立されたHTTP接続とssh接続の間で双方向の通信を可能にする必要があるため、どちらの接続が確立されたかを把握するためには が必要であり、接続追跡テーブルにこれらを格納します。このテーブルは成長します。そして成長する。そして が大きくなります。

あなたはsysctlの net.nf_conntrack_maxを使用してのsysctl net.netfilter.nf_conntrack_countとその限界を使用して、このテーブルの現在のサイズを確認することができます。 countが最大値を超えた場合、あなたのLinuxシステムは 新しいTCP接続を受け付けなくなります。これについては決して分かりません。 これが起こったという唯一の兆候は、 のエントリがトラッキングされていないということを示す/ var/log/syslogのどこかに隠れた単一の行である です。 1行、1回、最初に起こるとき。

カウントが常にmaxに非常に近い場合、 さんは、「ねえ、正確に正しい設定をしました」と思うかもしれませんが、間違っているでしょう。

あなたがする必要があること(または少なくともあなたが最初に考えていることです)は、 以下です。

この値が大きいほど、 カーネルがこれらのエントリを追跡するために使用するRAMが増えます。あなたのアプリケーションによって で使用可能なRAM。

私たちはnet.nf_conntrack_maxを上げてこのパスを開始しましたが、すぐに 私たちは毎日それを押し上げていました。 に入っていた接続は決して出てこなかった。

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 

は、それが将来的に誰かに役立ちます願っています。