Errore di timeout

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

Sintomo

Il deployment delle revisioni del proxy API tramite la UI di Edge o l'API di gestione non riesce a causa di un errore di timeout.

Messaggi di errore

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

Possibili cause

Le cause tipiche di questo problema sono:

Causa Dettagli Per
Problema di connettività di rete Errore di comunicazione tra il server di gestione e il processore di messaggi a causa di problemi di connettività di rete o regole firewall. Solo utenti di Cloud privato
Bundle proxy API di grandi dimensioni Il Message Processor potrebbe impiegare molto tempo per attivarsi se il bundle proxy API è di grandi dimensioni causando timeout RPC. Utenti di Cloud privato e pubblico

Problema di connettività di rete

Nota: solo gli utenti di Edge Private Cloud possono eseguire i seguenti passaggi. Se utilizzi Edge Public Cloud, contatta l'assistenza Apigee Edge.

Diagnosi

  1. Recupera lo stato del deployment per l'API specifica che mostra l'errore utilizzando la seguente chiamata API di gestione:
    curl -v http://<management-server-IPaddress>:<port#>/organizations/<orgname>/environments/<envname>/apis/<apiname>/deployments -u <username>

    Esempio di output che mostra l'errore:

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

    L'output di esempio riportato sopra mostra che l'errore si è verificato su uno dei Message Processors con UUID "ebbc1078-cbde-4a00-a7db-66a3c1b2b748".

  2. In base all'output dello stato del deployment del proxy API, accedi a ciascuno dei Message Processors con l'UUID corrispondente che ha mostrato l'errore ed esegui i seguenti passaggi:
    1. Controlla se il processore di messaggi è in ascolto sulla porta 4528:
      netstat -an | grep LISTEN | grep 4528

      Se il processore di messaggi non è in ascolto sulla porta 4528, riavvialo:

      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    2. Controlla di nuovo lo stato del deployment del proxy API utilizzando la chiamata API di gestione mostrata in passaggio 1 sopra. Se non ci sono errori, significa che il problema è stato risolto.
  3. Se il problema persiste, verifica la connettività dal server di gestione al Message Processor sulla porta 4528 seguendo questi passaggi:
    1. Se telnet è disponibile, utilizzalo:
      telnet <MessageProcessor_IP> 4528
    2. Se telnet non è disponibile, utilizza netcat per verificare la connettività come segue:
      nc -vz <MessageProcessor_IP> 4528
    3. Se ricevi la risposta "Connessione rifiutata" o "Timeout della connessione", contatta il team di operazioni di rete.
  4. Verifica la connettività dal processore di messaggi al server di gestione sulla porta 4526 seguendo questi passaggi:
    1. Se telnet è disponibile, utilizzalo:
      telnet <management-server-IP> 4526
    2. Se telnet non è disponibile, utilizza netcat per verificare la connettività come segue:
      nc -vz <management-server-IP> 4526 
    3. Se ricevi la risposta "Connessione rifiutata" o "Timeout della connessione", contatta il tuo team di operazioni di rete.
  5. Collabora con il team di operazioni di rete ed esegui le seguenti operazioni:
    1. Assicurati che il protocollo RPC sia consentito sia sul server di gestione sia sul Message Processor.
    2. Rimuovi eventuali restrizioni firewall o regole di sicurezza configurate tra i server di gestione e i Message Processor per consentire la connettività alla porta 4526 sul server di gestione e la connettività dal server di gestione ai Message Processor sulla porta 4528.
  6. Controlla di nuovo lo stato del deployment (fai riferimento al passaggio 1 sopra). Se non vedi errori, significa che il problema è stato risolto.
  7. Se il problema persiste, controlla se si verifica un problema di rete sul processore di messaggi. Se si verifica un problema di rete, il riavvio dello specifico processore di messaggi che mostra l'errore di timeout (in base all'output dello stato del deployment) potrebbe risolvere il problema:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  8. Se il problema persiste, controlla i log del server di gestione in: (/opt/apigee/var/log/edge-management-server/logs/system.log).

    Esempio di errore di timeout della chiamata dal log del server di gestione

    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 riscontri un errore simile a quello mostrato nell'esempio sopra, aumenta il timeout RPC sul server di gestione in modo che, in caso di rallentamento della rete, il server di gestione abbia il tempo di connettersi al processore di messaggi.

Risoluzione

Nota: solo gli utenti di Edge Private Cloud possono eseguire i seguenti passaggi. Se utilizzi Edge Public Cloud, contatta l'assistenza Apigee Edge.

  1. Esegui i seguenti passaggi per aumentare il timeout RPC:
    1. Crea il file /opt/apigee/customer/application/management-server.properties sulla macchina del server di gestione, se non esiste già.
    2. Aggiungi la seguente riga a questo file:
      conf_cluster_rpc.connect.timeout=<time in seconds>

      Il valore predefinito del timeout RPC è 10 e ti consigliamo di aumentarlo a 40 secondi. Impostalo come segue:

      conf_cluster_rpc.connect.timeout=40
    3. Assicurati che il file sia di proprietà di apigee:
      chown apigee:apigee /opt/apigee/customer/application/management-server.properties
    4. Riavvia il server di gestione:
      /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    5. Se hai più di un server di gestione, ripeti i passaggi precedenti su tutti i server di gestione.
    6. Esegui il deployment del proxy API nella UI di Edge o utilizzando la chiamata API di gestione di Edge. Se il proxy API viene sottoposto a deployment senza problemi, significa che il problema è stato risolto.
  2. Se il problema persiste, raccogli il comando tcpdump dal server di gestione e dal processore di messaggi. Abilita il comando tcpdump command su ciascuno dei server e poi avvia il deployment del proxy API dalla UI or utilizzando l'API di gestione:
    1. Esegui il seguente comando tcpdump dal server di gestione:
      tcpdump -i any -s 0 host <message-processor-IP address> -w <File name>
    2. Esegui il seguente comando tcpdump dal Message Processor:
      tcpdump -i any -s 0 host <management-server-IP address> -w <File name>
    3. Contatta l'assistenza Apigee Edge per ricevere assistenza nell' analisi dei tcpdump e per risolvere ulteriormente il problema.

Bundle proxy API di grandi dimensioni

Diagnosi

  1. Controlla le dimensioni del bundle proxy API per il quale si verifica l'errore di deployment osservato.
  2. Se le dimensioni sono ragionevolmente grandi (10 MB o più), è molto probabile che il Message Processor abbia bisogno di più tempo per attivare il proxy API.
  3. Se le dimensioni del bundle proxy API sono superiori a 15 MB, vai a Bundle proxy API di dimensioni superiori a 15 MB.

Risoluzione

Nota: solo gli utenti di Edge Private Cloud possono eseguire i seguenti passaggi. Se utilizzi Edge Public Cloud, contatta l'assistenza Apigee Edge.

Aumenta il timeout RPC sul server di gestione in modo che il processore di messaggi abbia abbastanza tempo per attivare i bundle proxy API di grandi dimensioni. Esegui i seguenti passaggi per aumentare il valore del timeout RPC:

  1. Crea il file /opt/apigee/customer/application/management-server.properties sulla macchina del server di gestione, se non esiste già.
  2. Aggiungi la seguente riga a questo file:
    conf_cluster_rpc.connect.timeout=<time in seconds>

    Il valore predefinito del timeout RPC è 10 e ti consigliamo di aumentarlo a 40 secondi. Impostalo come segue:

    conf_cluster_rpc.connect.timeout=40
  3. Assicurati che il file sia di proprietà di apigee:
    chown apigee:apigee /opt/apigee/customer/application/management-server.properties
  4. Riavvia il server di gestione:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. Se hai più di un server di gestione, ripeti i passaggi precedenti su tutti i server di gestione.

Se il problema persiste, contatta l'assistenza Apigee Edge per ulteriore aiuto.