0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Sync Gatewayデプロイメント:ファイルディスクリプタ設定

Last updated at Posted at 2021-11-05

※ Couchbase Mobile(Couchbase Lite, Syncgateway)に関する記事について、こちらも、参照ください。

概要

Sync Gatewayで使用可能なファイルディスクリプタの最大数を増やすことは、Sync Gatewayが開くことができるソケットの最大数、したがってSync Gatewayがサポートできるエンドポイントの最大数に直接影響します。

これには、(Sync Gatewayの設定のみではなく)OSのパラメーターを調整する必要があります。

※ここでの説明は、OSとしてCentOSを前提としています。

ここでの設定は単なる例であり、ユースケースに合わせて調整する必要があります。

OSのファイルディスクリプタ制限変更

ここでは、すべてのプロセスで使用できるファイルディスクリプタの最大数を増やす方法を紹介します。

/etc/sysctl.confファイルを編集します。次の行を追加します。

fs.file-max = 500000

次のコマンドを実行して、変更を適用します。

$ sysctl -p 

-pオプションにより、再起動後も変更が持続します

Sync Gateway設定のファイルディスクリプタ制限変更

Sync Gatewayのファイルディスクリプタの最大数を構成します。

構成ファイルのmaxFileDescriptorsプロパティを変更します。

{
  "maxFileDescriptors": 250000,
  "databases": {
    "todo": { ... }
  }
}

Sync Gatewayサービスのファイルディスクリプタ制限変更

systemd設定の場合

/usr/lib/systemd/system/sync_gateway.serviceには、LimitNOFILE=65535というハードコードされた制限が指定されています。

これを増やすには、sync_gateway.serviceファイルを目的の値に編集して、サービスを再起動します。

プロセスのファイルディスクリプタ制限変更

systemdの外部でSync Gatewayを実行している場合は、次の手順を使用します。

  1. 1つのプロセスで使用できるファイルディスクリプタの最大数のulimit設定を増やします。
$ ulimit -n 250000
  1. 再起動後もulimitの変更を保持するには、/etc/security/limits.confに次の行を追加します。
* soft nofile 250000
* hard nofile 250000
  1. 次のコマンドを実行して、変更を確認します。
$ cat /proc/sys/fs/file-max
$ ulimit -n

上記の両方のコマンドの出力値は「250000」になるはずです。

OSのTCPキープアライブ設定変更

Sync Gatewayで使用可能なファイルディスクリプタの最大数を増やしても、「too many open files (開いているファイルが多すぎます)」というエラーが表示される場合は、TCPキープアライブパラメーターを調整する必要があります。

問題を理解する

モバイルエンドポイントとの接続においては、クライアントが接続を閉じることなく、ネットワークから突然切断される場合があります。

デフォルトでは、これらの接続は、Sync Gatewayプロセスのtcp/ipスタックによってデッドであることが検出され、約7200秒(2時間)後にクリーンアップされます。このような接続が蓄積されると、Sync Gatewayで「開いているファイルが多すぎます」というエラーが表示される可能性があります。

影響関係を確認する

エラーが表示された場合に、次のコマンドを使用して、Sync Gatewayとの間に確立された接続の数を数えることができます。

$ lsof -p <sync_gw_pid> | grep -i established | wc -l

上記の方法で確認した値がファイルディスクリプタの最大制限に近い場合は、ファイルディスクリプタの最大制限をさらに高くするか、TCPキープアライブパラメータを調整して、デッドピアがソケットを開いたままにする時間を短縮します。

TCPキープアライブ設定の調整には欠点がないわけではなく、tcp/ipスタックがより頻繁にキープアライブパケットを送信するため、システム全体のネットワークトラフィックの量が増加することに注意が必要です。

TCPキープアライブ設定変更手順

TCPキープアライブ設定を調整するためには、次の行を/etc/sysctl.confファイルに追加します。

net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 20

これは次のように解釈されます。

  • キープアライブルーチンは、最初のキープアライブプローブを送信する前に、最初に10分(600秒)待機します。
  • プローブを1分(60秒)ごとに再送信します。
  • ACK応答が20回連続して受信されない場合、接続は切断済みとしてマークされます。

この例では、デッドピア接続がハングアップする時間が(デフォルトの約2時間から)約30分に短縮されます。

さらに時間を短縮するために、tcp_retries2の値を減らすことができます。次の行を/etc/sysctl.confファイルに追加します。

net.ipv4.tcp_retries2 = 8

変更をアクティブにして再起動後も保持するには、次のコマンドを実行します。

$ sysctl -p

関連情報

参照:Glass Onion Blog - Increasing ulimit and file descriptors limit on Linux

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?