Erro de tempo limite

Você está lendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
info

Sintoma

A implantação de revisões de proxy de API pela interface do Edge ou pela API de gerenciamento falha com um erro de tempo limite.

Mensagens de erro

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

Causas possíveis

As causas típicas desse problema são:

Causa Detalhes Para
Problema de conectividade de rede Falha de comunicação entre o servidor de gerenciamento e o processador de mensagens devido a problemas de conectividade de rede ou regras de firewall. Somente usuários da nuvem privada
Pacote de proxy de API grande O processador de mensagens pode levar muito tempo para ativar se o pacote de proxy de API for grande em tamanho, o que leva a tempos limite de RPC. Usuários da nuvem pública e privada

Problema de conectividade de rede

Observação:somente os usuários do Edge Private Cloud podem realizar as etapas a seguir. Se você estiver no Edge Public Cloud, entre em contato com o suporte do Apigee Edge.

Diagnóstico

  1. Receba o status de implantação da API específica que mostra o erro usando a seguinte chamada de API de gerenciamento:
    curl -v http://<management-server-IPaddress>:<port#>/organizations/<orgname>/environments/<envname>/apis/<apiname>/deployments -u <username>

    Exemplo de saída mostrando o erro:

    { 
                    "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"
                    } 

    A saída de exemplo acima mostra que o erro ocorreu em um dos processadores de mensagens com o UUID "ebbc1078-cbde-4a00-a7db-66a3c1b2b748".

  2. Com base na saída do status de implantação do proxy de API, faça login em cada um dos processadores de mensagens com o UUID correspondente que mostrou o erro e siga estas etapas:
    1. Verifique se o processador de mensagens está detectando a porta 4528:
      netstat -an | grep LISTEN | grep 4528

      Se o processador de mensagens não estiver detectando a porta 4528, reinicie o processador de mensagens:

      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    2. Verifique novamente o status de implantação do proxy de API usando a chamada de API de gerenciamento mostrada na etapa 1 acima. Se não houver erros, isso indica que o problema foi resolvido.
  3. Se o problema persistir, teste a conectividade do servidor de gerenciamento com o processador de mensagens na porta 4528 usando as etapas a seguir:
    1. Se o telnet estiver disponível, use-o:
      telnet <MessageProcessor_IP> 4528
    2. Se o telnet não estiver disponível, use o netcat para verificar a conectividade da seguinte maneira:
      nc -vz <MessageProcessor_IP> 4528
    3. Se você receber a resposta "Conexão recusada" ou "Conexão expirada", entre em contato com sua equipe de operações de rede.
  4. Teste a conectividade do processador de mensagens com o servidor de gerenciamento na porta 4526 usando as etapas a seguir:
    1. Se o telnet estiver disponível, use-o:
      telnet <management-server-IP> 4526
    2. Se o telnet não estiver disponível, use o netcat para verificar a conectividade da seguinte maneira:
      nc -vz <management-server-IP> 4526 
    3. Se você receber a resposta "Conexão recusada" ou "Conexão expirada", entre em contato com sua equipe de operações de rede.
  5. Trabalhe com sua equipe de operações de rede e faça o seguinte:
    1. Verifique se o protocolo RPC está permitido no servidor de gerenciamento e no processador de mensagens.
    2. Remova as restrições de firewall ou as regras de segurança configuradas entre os servidores de gerenciamento e os processadores de mensagens para permitir a conectividade com a porta 4526 no servidor de gerenciamento e a conectividade do servidor de gerenciamento com os processadores de mensagens na porta 4528.
  6. Verifique novamente o status de implantação (consulte a etapa 1 acima). Se você não encontrar erros, então isso indica que o erro foi resolvido.
  7. Se o problema persistir, verifique se há um problema de rede no processador de mensagens. Se houver um problema de rede, reiniciar o processador de mensagens específico que mostra o erro de tempo limite (de acordo com a saída do status de implantação) poderá corrigir o problema:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  8. Se o problema ainda persistir, verifique os registros do servidor de gerenciamento em: (/opt/apigee/var/log/edge-management-server/logs/system.log).

    Exemplo de erro de tempo limite de chamada do registro do servidor de gerenciamento

    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] 
            

    Se você observar um erro semelhante ao mostrado no exemplo acima, aumente o tempo limite de RPC no servidor de gerenciamento para que, se houver alguma lentidão na rede, ele dê tempo para o servidor de gerenciamento se conectar ao processador de mensagens.

Resolução

Observação:somente os usuários do Edge Private Cloud podem realizar as etapas a seguir. Se você estiver no Edge Public Cloud, entre em contato com o suporte do Apigee Edge.

  1. Siga estas etapas para aumentar o tempo limite de RPC:
    1. Crie o arquivo /opt/apigee/customer/application/management-server.properties na máquina do servidor de gerenciamento, se ele ainda não existir.
    2. Adicione a seguinte linha a esse arquivo:
      conf_cluster_rpc.connect.timeout=<time in seconds>

      O valor de tempo limite de RPC padrão é 10, e é recomendável aumentá-lo para 40 segundos. Defina-o da seguinte maneira:

      conf_cluster_rpc.connect.timeout=40
    3. Verifique se esse arquivo pertence ao apigee:
      chown apigee:apigee /opt/apigee/customer/application/management-server.properties
    4. Reinicie o servidor de gerenciamento:
      /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    5. Se você tiver mais de um servidor de gerenciamento, repita as etapas acima em todos os servidores de gerenciamento.
    6. Implante o proxy de API na interface do Edge ou usando a chamada da API de gerenciamento do Edge. Se o proxy de API for implantado sem problemas, isso indica que o problema foi resolvido.
  2. Se o problema persistir, colete o comando tcpdump do servidor de gerenciamento e do processador de mensagens. Ative o comando tcpdump em cada um dos servidores e inicie a implantação do proxy de API na interface ou usando a API de gerenciamento:
    1. Execute o comando tcpdump abaixo no servidor de gerenciamento:
      tcpdump -i any -s 0 host <message-processor-IP address> -w <File name>
    2. Execute o comando tcpdump abaixo no processador de mensagens:
      tcpdump -i any -s 0 host <management-server-IP address> -w <File name>
    3. Entre em contato com o suporte do Apigee Edge para receber ajuda na análise dos tcpdumps e solucionar o problema.

Pacote de proxy de API grande

Diagnóstico

  1. Verifique o tamanho do pacote de proxy de API para o qual o erro de implantação está sendo observado.
  2. Se o tamanho for razoavelmente grande (10 MB ou mais), é muito provável que o processador de mensagens precise de mais tempo para ativar o proxy de API.
  3. Se o tamanho do pacote de proxy de API for maior que 15 MB, acesse Pacote de proxy de API maior que 15 MB.

Resolução

Observação:somente os usuários do Edge Private Cloud podem realizar as etapas a seguir. Se você estiver no Edge Public Cloud, entre em contato com o suporte do Apigee Edge.

Aumente o tempo limite de RPC no servidor de gerenciamento para que o processador de mensagens tenha tempo suficiente para ativar pacotes de proxy de API grandes. Siga estas etapas para aumentar o valor de tempo limite de RPC:

  1. Crie o arquivo /opt/apigee/customer/application/management-server.properties na máquina do servidor de gerenciamento, se ele ainda não existir.
  2. Adicione a seguinte linha a esse arquivo:
    conf_cluster_rpc.connect.timeout=<time in seconds>

    O valor de tempo limite de RPC padrão é 10, e é recomendável aumentá-lo para 40 segundos. Defina-o da seguinte maneira:

    conf_cluster_rpc.connect.timeout=40
  3. Verifique se esse arquivo pertence ao apigee:
    chown apigee:apigee /opt/apigee/customer/application/management-server.properties
  4. Reinicie o servidor de gerenciamento:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. Se você tiver mais de um servidor de gerenciamento, repita as etapas acima em todos os servidores de gerenciamento.

Se o problema persistir, entre em contato com o suporte do Apigee Edge para receber mais ajuda.