すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for MongoDB:レプリカセットインスタンスの最大接続数のストレステスト

最終更新日:Jun 04, 2026

同じ VPC 内の ApsaraDB for MongoDB インスタンスにアクセスする ECS インスタンスからストレステストを実行することで、仕様の異なる ApsaraDB for MongoDB レプリカセットインスタンスが最大接続数に達することができるか検証します。

テスト環境

Elastic Compute Service (ECS) インスタンスと ApsaraDB for MongoDB レプリカセットインスタンスを作成します。 レプリカセットインスタンスの作成およびECS インスタンスの作成をご参照ください。

次の表に、このテストで使用したインスタンスの構成を示します。

設定項目

ECS インスタンス

クラウドディスクを使用する ApsaraDB for MongoDB インスタンス

ローカルディスクを使用する ApsaraDB for MongoDB インスタンス

リージョンとゾーン

北京ゾーン H

北京ゾーン H

北京ゾーン H

ネットワークタイプ

Virtual Private Cloud (VPC)

VPC

VPC

インスタンスカテゴリ

c6e、パフォーマンスが強化されたコンピューティング最適化インスタンスファミリー

汎用および専用

汎用および専用

インスタンスタイプ

ecs.c6e.2xlarge

3 つのインスタンスタイプをテストしました。 テスト結果をご参照ください。

2 つのインスタンスタイプをテストしました。 テスト結果をご参照ください。

ストレージタイプ

ESSD (エンタープライズ SSD) AutoPL ディスク

ESSD

ローカル SSD

イメージまたはエンジンバージョン

Alibaba Cloud Linux 3.2104 LTS 64 ビット

4.19.91-26.al7.x86_64

3.10.0-327.ali2017.alios7.x86_64

カーネルバージョン

N/A

  • メジャーバージョン: MongoDB 4.4

  • マイナーバージョンのベースライン: 4.4.28

  • メジャーバージョン: MongoDB 4.2

  • マイナーバージョンのベースライン: 4.2.23

  • ApsaraDB for MongoDB インスタンスは、プライマリ、セカンダリ、非表示の 3 ノードアーキテクチャを使用します。

  • ECS インスタンスと ApsaraDB for MongoDB インスタンスは同じゾーンにあり、平均 RTT は 0.103 ms です。

テストツール

テスト方法

  1. ApsaraDB for MongoDB インスタンスのホワイトリストに ECS インスタンスの [プライマリプライベート IP] を追加します。詳細については、「ホワイトリストを変更する」をご参照ください。

    説明

    ECS コンソールにログインし、[インスタンス詳細] ページの [設定情報] セクションで ECS インスタンスの [プライマリプライベート IP アドレス] を確認できます。

  2. ECS インスタンスに接続します。 詳細については、「ECS コンソール (簡易版) を使用した ECS インスタンスの作成と管理」をご参照ください。

  3. YCSB ツールを使用してテストデータをロードします。

    ./bin/ycsb.sh load mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=10000000 -p mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin" -p table=test -threads 8

    次の設定を変更します。

    • recordcount=1000000ApsaraDB for MongoDB インスタンスにロードされる合計レコード数。

    • mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin"ApsaraDB for MongoDB インスタンスの接続文字列。 アカウント: test、データベース: admin

      説明

      ApsaraDB for MongoDB コンソールにログオンします。Database Connection ページで、[内部接続 - VPC] セクションの接続文字列を見つけます。

    • threads 8: 同時クライアントスレッド数。

  4. ストレステストを実行します。

    ./bin/ycsb.sh run mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=10000000 -p operationcount=5000000 -p readproportion=50 -p updateproportion=50 -p requestdistribution=zipfian -p mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin&maxPoolSize=8000" -p table=test -threads 8000

    次の設定を変更します。

    • recordcount=1000000ApsaraDB for MongoDB インスタンスにロードされる合計レコード数。

    • operationcount=5000000: 読み取りおよび書き込み操作の合計数。

    • insertproportion=0: 挿入比率。

    • readproportion=50: 読み取り比率。

    • updateproportion=50: 更新比率。

    • mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin"ApsaraDB for MongoDB インスタンスの接続文字列。 アカウント: test、データベース: admin

      説明
      • ApsaraDB for MongoDB コンソールにログインします。Database Connection ページの [内部接続 - VPC] セクションで接続文字列を確認します。

      • maxPoolSize パラメーターを指定する必要があります。 そうしない場合、デフォルト値の 100 が適用され、`MongoWaitQueueFullException` エラーが発生し、テストが目標の最大接続数に達しなくなる可能性があります。

  5. モニタリングデータを表示します。 ノードモニタリング (旧基本モニタリング)

    [ノードモニタリング] タブで、テストの時間範囲を選択し、CPU使用率メモリ使用率QPS操作数接続数、および接続数使用率 のメトリックを表示します。

96,000 接続のストレステストに関する追加情報

YCSB は Java に依存しています。 JVM ヒープメモリは限られているため、20,000 を超える同時スレッドでテストを実行すると、`Cannot allocate memory` エラーが返されます。image

`JAVA_OPTS` を増やしてもこの問題は解決しません。 代わりに、カスタムストレステストプログラムを使用してください。このプログラムは、スレッドを周期的に生成し、各スレッドが MongoClient を作成してクエリを実行し、接続を解放せずに開いたままにします。

単一のストレステストクライアントはポートが限られているため、96,000 接続 (32 コア 128 GB の仕様で必須) に達することができません。 複数のマシンで同じプログラムを実行してください。

現在のポート範囲をクエリします。

sysctl net.ipv4.ip_local_port_range

出力例:

net.ipv4.ip_local_port_range = 40000    65535

テストの前にポート範囲を拡大します。

sudo sysctl -w net.ipv4.ip_local_port_range="10240 65535"

テスト結果

ESSD を使用するインスタンス

4 コア 8 GB メモリの専用インスタンス

最大接続数:8,000

QPS

接続数

接続使用率

CPU 使用率

メモリ使用量

image.png

image.png

image.png

image.png

image.png

説明

ノードモニタリングタブの分レベルの粒度では、ピーク接続数が表示されない場合があります。実際の接続数は 8,000 に達しており、これは詳細なモニタリングまたは serverStatus 出力の connections サブドキュメントで検証可能です。image

32 コア 128 GB メモリの専用インスタンス

最大接続数:96,000

QPS

接続数

接続使用率

CPU 使用率

メモリ使用量

image.png

image.png

image.png

image.png

image.png

説明

96,000 接続のテストでは、8,000 および 16,000 接続のテストとは異なるツールを使用しているため、QPS、CPU、およびメモリのメトリックは直接比較できません。

8 コア 32 GB メモリの汎用インスタンス

最大接続数:16,000

QPS

接続数

接続使用率

CPU 使用率

メモリ使用量

image.png

image.png

image.png

image.png

image.png

ローカルディスクを使用するインスタンス

16 コア 64 GB メモリの汎用インスタンス

最大接続数:32,000

QPS

接続数

接続使用率

CPU 使用率

メモリ使用量

image.png

image.png

image.png

image.png

image.png

説明

16 コア 64 GB のインスタンスでは、分単位の粒度でデータを見ると、一部のデータポイントに欠落が見られます。これは、CPU 使用率が 100% に達した際に収集コマンドがタイムアウトしたためです。これらの時点における実際の接続数は 32,000 のままでした。

2 コア 16 GB メモリの専用インスタンス

最大接続数:8,000

QPS

接続数

接続使用率

CPU 使用率

メモリ使用量

image.png

image.png

image.png

image.png

image.png

まとめ

  • ApsaraDB for MongoDB レプリカセットインスタンスは、テストされたすべての仕様およびストレージタイプで最大接続数に達しました。

  • 最大値に達すると、それ以降の接続は拒否されます。 アプリケーションでは、接続の失敗により、高レイテンシやリクエストのスタックが発生します。

  • 同時接続数が多いほど、より多くの CPU とメモリを消費します。 ビジネス要件に基づいて接続数を調整してください。