3. サーバのチューニング

OS、ミドルウェアと各サーバのチューニングについて説明します。

各サーバで利用するミドルウェアについては、ミドルウェア を参照ください。

3.1. Linux OS

Linux OS の場合は、下記のカーネルパラメータをチューニングしてください。

3.1.1. ulimit の設定

ulimit 設定のOSデフォルト値が小さすぎるため、サーバとして運用するときは大きめに設定してください(特に、APサーバとDBサーバ)。

  • nproc: ユーザ毎に起動できるプロセス数
  • nofile: プロセス毎に同時に開けるファイル数の上限

設定方法は、ulimit の設定 を参照ください。

3.1.2. Transparent Huge Pages (THP) の無効化

MongoDB サーバが稼働する環境向けの設定です。

THP はカーネルのメモリ性能改善機能の一つです。メモリのシーケンシャルアクセスには有益ですが、 DB のようなランダムアクセスが多い場合はパフォーマンスが落ちることがあるため、無効にする必要があります。

設定方法は、 MongoDB disable transparent-huge-pages を参照ください。

3.2. Tomcat

下記の JVM ヒープサイズと接続数上限について、必要に応じてチューニングしてください。 対象は後述する API/Console サーバおよび SSE Push サーバです。

  • -Xmx: JVM ヒープサイズの最大メモリ量
  • -Xms: JVM ヒープサイズの最小メモリ量
  • maxConnections: 同時に受け付けるコネクション数の上限

JVM ヒープサイズ設定は、JVM ヒープサイズ設定 を参照ください。

接続数上限設定は、設定ファイル($TOMCAT_HOME]/conf/server.xml) の Connectorタグに設定してください。

3.3. MongoDB

前述の ulimit の設定 と Transparent Huge Pages (THP) の無効化が必要です。

3.4. Fluentd

MongoDB Output Pluginの cappedコレクション容量を必要に応じてチューニングしてください。

  • capped_size: capped コレクション容量。 MongoDB に保存するログデータ量に応じて調整してください。
  • 設定方法は、Fluentdの利用設定 を参照ください。

3.5. RabbitMQ

前述の ulimit の設定が必要です。

3.6. API/Console サーバ

前述の ulimit と Tomcat の設定が必要です。

また、必要に応じて MongoDB サーバに対して接続する際の最大TCPコネクション数(mongo.maxConnectionsPerHost)を チューニングします。

Tomcat の設定について

  • 低負荷運用の場合(同時アクセス数低、データ量少ない)は、 ヒープサイズの設定は "-Xmx1024m -Xms512m" で十分です。
  • オブジェクトの書込(1KB)とクエリ(1MB)を秒間リクエスト500回で実行する場合、VM ヒープサイズの使用量(実測)は 500MB弱になります。
  • 高負荷運用(同時アクセス数高、データ量多い)の場合は、ヒープサイズとコネクション数上限を引き上げてください。

mongo.maxConnectionsPerHost: 各APIサーバから MongoDB サーバに対して接続する際の最大TCPコネクション数

  • mongo.maxConnectionsPerHost を大きく設定することでピーク性能を上げることができます。 ただしAPIサーバをスケールさせた場合、MongoDB へのコネクション数が多くなりすぎすぎ、接続エラー が発生する可能性がありますので注意が必要です。
  • 設定方法は、MongoDB設定 を参照ください。

3.7. SSEPush サーバ

前述の ulimit と Tomcat の設定が必要です。

Tomcat の設定について

  • 同時アクセス数(クライアント数)が多い場合は、Tomcatの maxConnections を同時接続するクライアント数より大きな値に設定してください。 推奨値は数千~10,000程度までです。
  • 実測では、10,000接続の場合は、JVM ヒープサイズの最大メモリ量は、3GB程度が必要です。

3.8. Cloud Functions サーバ

前述の ulimit の設定が必要です。

サーバマネジャー(Cloudfn-server-manager)の JVM ヒープサイズ 設定は、一般的に変更不要ですが、下記の方法でチューニングできます。

Cloudfn-server-manager の service ファイル(CentOS7 の場合は、 cloudfn-server-manager.service)にある環境変数定義(JAVA_OPTS) で調整してください。

[service]
Environment="JAVA_OPTS=-Xmx1024m -Xms512m"