タイムアウト エラー

症状

Edge UI または管理 API を使用した API プロキシ リビジョンのデプロイが失敗し、タイムエラーが表示されます。

エラー メッセージ

    Click to change deployment status.
    The revision is deployed and traffic can flow, but flow may be impaired.
    Error: Call timed out; either server is down or server is not reachable
    

考えられる原因

通常この問題は、次の原因によるものです。

原因 詳細 対象
ネットワーク接続の問題 ネットワーク接続の問題またはファイアウォール ルールが原因で、Management Server と Message Processor との間で通信障害が発生している。 Private Cloud ユーザーのみ
API プロキシ バンドルが大きい API プロキシ バンドルのサイズが大きく、RPC タイムアウトが発生し、おそらく Message Processor がアクティブ化するまでに時間がかかっている。 Private Cloud と Public Cloud ユーザー

ネットワーク接続の問題

注: 次の手順を実施できるのは Edge Private Cloud ユーザーのみです。Edge Public Cloud を使用している場合は、Apigee サポートにお問い合わせください。

診断

  1. 次の管理 API 呼び出しを使用して、エラーを示している API のデプロイのステータスを取得します。
        curl -v http://<management-server-IPaddress>:<port#>/organizations/<orgname>/environments/<envname>/apis/<apiname>/deployments -u <username>
        

    エラーを示す出力例:

        {
                        "error": "Call timed out; either server is down or server is not reachable",
                        "status": "error",
                        "type": [
                        "message-processor"
                        ],
                        "uUID": "ebbc1078-cbde-4a00-a7db-66a3c1b2b748"
                        },
                        {
                        "status": "deployed",
                        "type": [
                        "message-processor"
                        ],
                        "uUID": "204e2b7e-52f7-46d9-b458-20f9bfb51e6d"
                        },
                        {
                        "status": "deployed",
                        "type": [
                        "router"
                        ],
                        "uUID": "967e63c6-ee95-47c0-9608-f4a32638fb1e"
                        },
                        {
                        "status": "deployed",
                        "type": [
                        "router"
                        ],
                        "state" : "error"
                        }
        

    上記の出力例は、UUID が「ebbc1078-cbde-4a00-a7db-66a3c1b2b748」である Message Processor のいずれかでエラーが発生したことを示しています。

  2. 使用している API プロキシのデプロイのステータス出力に基づいて、エラーを示した該当の UUID を使用して各 Message Processor にログインし、次の手順を実施します。
    1. Message Processor がポート 4528 で待機しているかどうかを確認します。
          netstat -an | grep LISTEN | grep 4528
          

      Message Processor がポート 4528 で待機していない場合は、Message Processor を再起動します。

          /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
          
    2. 上記の手順 1 の管理 API 呼び出しを使用して、API プロキシのデプロイのステータスを再確認します。エラーがなければ、問題が解決されたことを示します。
  3. 問題が解決しない場合は、次の手順に沿って、Management Server からポート 4528 の Message Processor への接続をテストします。
    1. telnet を使用します。
          telnet <MessageProcessor_IP> 4528
          
    2. telnet を使用できない場合は、次のように netcat で接続を確認します。
          nc -vz <MessageProcessor_IP> 4528
          
    3. [Connection Refused] または [Connection timed out] と表示された場合は、ネットワーク オペレーション チームにお問い合わせください。
  4. 次の手順に沿って、ポート 4526 の Message Processor と Management Server の接続をテストします。
    1. telnet を使用します。
          telnet <management-server-IP> 4526
          
    2. telnet を使用できない場合は、次のように netcat で接続を確認します。
          nc -vz <management-server-IP> 4526
          
    3. [Connection Refused] または [Connection timed out] と表示された場合は、ネットワーク オペレーション チームにお問い合わせください。
  5. ネットワーク オペレーション チームの協力で、次の手順を実施してください。
    1. Management Server と Message Processor の両方で RPC プロトコルが許可されていることを確認します。
    2. Management Server と Message Processor との間のファイアウォール制限またはセキュリティルール セットアップを削除して、Management Server のポート 4526 への接続と、Management Server からポート 4528 の Message Processor への接続を許可します。
  6. デプロイ状況を再確認します(上記の手順 1 を参照)。エラーが表示されない場合は、エラーが解決されたことを示します。
  7. 問題が解決しない場合は、Message Processor のネットワークに問題がないかどうかを確認してください。ネットワークに問題がある場合、タイムアウト エラーを示した該当の Message Processor を再起動すると(デプロイのステータス出力ごとに)問題が解決することがあります。
        /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
        
  8. それでも問題が解決しない場合は、(/opt/apigee/var/log/edge-management-server/logs/system.log)で Management Server のログを確認してください。

    Management Server ログの呼び出しタイムアウト エラーの例

        2016-05-17 09:29:56,448 org:myorg env:prod qtp281969267-360792 ERROR DISTRIBUTION - RemoteServicesConfigEventHandler.configureServers() : exception for server with uuid e1381db7-d83b-4752-ae04-2de33f07e555 : cause = RPC Error 504: Call timed out communication error = true
                com.apigee.rpc.RPCException: Call timed out
                at com.apigee.rpc.impl.AbstractCallerImpl.handleTimeout(AbstractCallerImpl.java:64) ~[rpc-1.0.0.jar:na]
                at com.apigee.rpc.impl.RPCMachineImpl$OutgoingCall.handleTimeout(RPCMachineImpl.java:483) ~[rpc-1.0.0.jar:na]
                at com.apigee.rpc.impl.RPCMachineImpl$OutgoingCall.access$000(RPCMachineImpl.java:402) ~[rpc-1.0.0.jar:na]
                at com.apigee.rpc.impl.RPCMachineImpl$OutgoingCall$1.run(RPCMachineImpl.java:437) ~[rpc-1.0.0.jar:na]
                at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:532) ~[netty-all-4.0.0.CR1.jar:na]
                at io.netty.util.HashedWheelTimer$Worker.notifyExpiredTimeouts(HashedWheelTimer.java:430) ~[netty-all-4.0.0.CR1.jar:na]
                at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:371) ~[netty-all-4.0.0.CR1.jar:na]
                at java.lang.Thread.run(Thread.java:745) ~[na:1.7.0_79]
    
        

    上記の例と同様のエラーが発生した場合は、Management Server の RPC タイムアウト値を増やすと、ネットワークが遅くなった場合でも Management Server が Message Processor に接続する時間を確保できます。

解決策

注: 次の手順を実施できるのは Edge Private Cloud ユーザーのみです。Edge Public Cloud を使用している場合は、Apigee サポートにお問い合わせください。

  1. RPC タイムアウト値を増やすには、次の手順を実施します。
    1. Management Server マシンがまだ存在しない場合は、/opt/apigee/customer/application/management-server.properties ファイルを作成します。
    2. このファイルに次の行を追加します。
          conf_cluster_rpc.connect.timeout=<time in seconds>
          

      デフォルトの RPC タイムアウト値は 10 ですが、40 秒に増やすことをおすすめします。次のように設定します。

          conf_cluster_rpc.connect.timeout=40
          
    3. このファイルが apigee によって所有されていることを確認してください。
          chown apigee:apigee /opt/apigee/customer/application/management-server.properties
          
    4. Management Server を再起動します。
          /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
          
    5. Management Server が複数ある場合は、すべての Management Server で上記の手順を繰り返します。
    6. Edge UI に API プロキシをデプロイするか、Edge 管理 API 呼び出しを使用してデプロイします。API プロキシが問題なくデプロイされると、問題が解決されたことを示します。
  2. 問題が解決しない場合は、tcpdump コマンドを Management Server と Message Processor から収集します。各サーバーで tcpdump コマンドを有効にした後、場合によっては管理 API を使用して、UI から API プロキシのデプロイを開始します。
    1. Management Server から次の tcpdump コマンドを実行します。
          tcpdump -i any -s 0 host <message-processor-IP address> -w <File name>
          
    2. Message Processor から次の tcpdump コマンドを実行します。
          tcpdump -i any -s 0 host <management-server-IP address> -w <File name>
          
    3. Apigee サポートに連絡して、tcpdumps の分析のために協力を求めて問題をトラブルシューティングします。

API プロキシ バンドルが大きい

診断

  1. デプロイエラーが発生している API プロキシ バンドルのサイズを確認します。
  2. サイズがかなり大きい場合(10 MB 以上)、Message Processor が API プロキシをアクティブ化するのに時間がかかることがあります。
  3. API プロキシ バンドルのサイズが 15 MB を超える場合は、15 MB を超える API プロキシ バンドルに進みます。

解決策

注: 次の手順を実施できるのは Edge Private Cloud ユーザーのみです。Edge Public Cloud を使用している場合は、Apigee サポートにお問い合わせください。

Management Server で RPC タイムアウト値を増やすと、Message Processor に大きい API プロキシ バンドルをアクティブ化するのに十分な時間を確保できます。RPC タイムアウト値を増やすには、次の手順を実施します。

  1. /opt/apigee/customer/application/management-server.properties ファイルが存在しない場合は、Management Server マシンでこのファイルを作成します。
  2. このファイルに次の行を追加します。
        conf_cluster_rpc.connect.timeout=<time in seconds>
        

    デフォルトの RPC タイムアウト値は 10 ですが、40 秒に増やすことをおすすめします。次のように設定します。

        conf_cluster_rpc.connect.timeout=40
        
  3. このファイルが apigee によって所有されていることを確認してください。
        chown apigee:apigee /opt/apigee/customer/application/management-server.properties
        
  4. Management Server を再起動します。
        /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
        
  5. Management Server が複数ある場合は、すべての Management Server で上記の手順を繰り返します。

問題が解決しない場合は、再度、Apigee サポートにお問い合わせください。