sql >> データベース >  >> NoSQL >> MongoDB

負荷テスト中にMongoDBが応答しないのはなぜですか?

    修正:

    sudo sysctl net.ipv4.tcp_tw_reuse=1
    

    次に、mongoを再起動します。

    または、/ etc / sysctl.confに追加することもできます(再起動時に実行されます):

    net.ipv4.tcp_tw_reuse=1
    

    次に、これを実行してリロードします(再起動せずに)

    sudo sysctl -p /etc/sysctl.conf
    

    この「修正」により、TCPソケット(サーバー全体)のタイムウェイト状態が無効になります。ですから、それは実際にはまったく修正ではありません。ただし、mongoがSO_LINGERを使用してtimewait状態を減らすまで、多数のサーバーソケットがTIME_WAIT状態でプールされ、新しい接続に使用できなくなります。これにより、TIME_WAITの接続数を確認できます:

    netstat -an | grep TIME_WAIT | wc -l
    

    これにより、約28kのTIME_WAIT接続で失敗することがわかりました。このカーネルフラグの使用:

    sysctl net.ipv4.ip_local_port_range="18000 65535"
    

    サーバーは45k接続で失敗します。したがって、エラーをより簡単に再現するために、範囲を200またはそれよりも小さい値に下げることができます。

    したがって、このの結果は 結局のところ、プログラミングの質問(最後のリンクからわかるように):

    TCPオプションSO_LINGER(ゼロ)-必要な場合

    http://alas.matf.bg.ac.rs /manuals/lspe/snode=105.html



    1. ObjectIDが定義されていません。 MongoShellでIDでオブジェクトが見つかりません

    2. MongoDBテキスト検索と順序付け

    3. データの複数のバージョンをRedisキャッシュに保存する

    4. mongodbアグリゲーションの$replaceRoot