コンテンツ
質問
P4Vから大量のファイルのサブミットを行ったところ、タイムアウトエラーが表示されました。
解決方法を教えてください。
Submit aborted – fix problems then use 'p4 submit -c 12345'.
SSL receive failed.
read: Connection timed out: Connection timed out.
回答
P4Dサーバに"net.keepalive"を設定します。
解消されない場合は、他のサーバやクライアントマシン(P4V)に"net.keepalive"を設定します。
このメッセージは、サブミット処理が停止もしくは中断してしまったにも関わらず、通信が残り続けたため、タイムアウトが発生したことにより表示される場合があります。
keepalive機能によってクライアントとの通信が保持されていたと考えられるため、keepaliveの設定を変更することにより、タイムアウトエラーが解消できます。
詳細
以下のコマンドを実行し、keepaliveの設定を変更します。
※ OS側で設定済みのkeepalive動作は上書きされます。
設定する値については、「解説」の項目をご確認ください。
■ Helix Core(P4D)サーバの設定方法
p4 -p server:port -u super configure set net.keepalive.idle=600
p4 -p server:port -u super configure set net.keepalive.interval=20
p4 -p server:port -u super configure set net.keepalive.count=12
※ server:port:P4Dサーバの情報を指定
※ super:スーパー権限ユーザを指定
この設定をすることで、最大でも600秒+(20秒×12)= 840秒が最大の待ち時間となり、
処理が行われていないサブミットが残り続けることを回避できます。
■ P4Broker、P4P(プロキシ)、エッジサーバの設定方法
p4 -p server:port -u super configure set serverid#net.keepalive.idle=600
p4 -p server:port -u super configure set serverid#net.keepalive.interval=20
p4 -p server:port -u super configure set serverid#net.keepalive.count=12
※ server:port:P4Dサーバの情報を指定
※ super:スーパー権限ユーザを指定
※ serverid:設定対象サーバ(server id)を指定
■ P4V(クライアント)の設定方法
1.p4config.txtの作成
"p4config.txt"がクライアントマシン上に存在しない場合、対象ワークスペースのルート直下に作成します。
※ keepalive設定は、P4CONFIGに記述する必要があります。
2.環境変数P4CONFIGの設定
手順1で作成したp4config.txtを適用するために、以下のコマンドを実行します。
p4 set P4CONFIG=p4config.txt
3.p4config.txtへ構成可能変数を記述
net.keepalive.idle=600
net.keepalive.interval=20
net.keepalive.count=12
4.設定の確認
コマンドを実行し、設定値を確認します。
p4 configure show
⋮
net.keepalive.idle: 600 (configure)
net.keepalive.interval: 20 (configure)
net.keepalive.count: 12 (configure)
⋮
解説
数値は例として記載しています。設定する値は実環境にあわせて変更してください。
net.keepalive.idle=600
keepaliveパケットの送信を開始するまでのアイドル時間(秒)を指定します。
※タイムアウトしている時間より長めの時間を指定してください。
コマンド実行から600秒後(10分後)にkeepaliveパケットがクライアントからP4Dサーバに対して送信されます。
P4Dサーバがサブミットを処理中の場合、P4Dサーバはすぐにkeepalive ACKパケットをクライアント側に返却します。
net.keepalive.interval=20
keepaliveパケットの送信間隔(秒)を指定します。
P4Dサーバが応答しない場合、20秒間隔でkeepaliveパケットが送信されます。
net.keepalive.count=12
keepaliveパケットが確認されず、接続失敗と判断する回数を指定します。
12回送信しても応答がない場合、クライアントはP4Dサーバに対してRSTパケットを送信します。