您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
問題
透過 Edge UI 或 Management API 部署 API Proxy 修訂版本時,發生逾時錯誤。
錯誤訊息
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
可能原因
這個問題的常見原因如下:
| 原因 | 詳細資料 | 適用於 |
| 網路連線問題 | 管理伺服器與訊息處理器之間的通訊失敗,原因可能是網路連線問題或防火牆規則。 | 僅限私有雲使用者 |
| 大型 API Proxy 套裝組合 | 如果 API Proxy 套件很大,訊息處理器可能需要很長時間才能啟用,導致 RPC 超時。 | 私有雲和公有雲使用者 |
網路連線問題
附註:只有 Edge 私有雲使用者才能執行下列步驟。如果您使用 Edge Public Cloud,請與 Apigee Edge 支援團隊聯絡。
診斷
- 使用下列管理 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」。 - 根據 API Proxy 的部署狀態輸出內容,使用顯示錯誤的對應 UUID 登入每個訊息處理器,然後執行下列步驟:
- 確認訊息處理器是否正在監聽通訊埠 4528:
netstat -an | grep LISTEN | grep 4528
如果訊息處理工具未監聽通訊埠 4528,請重新啟動訊息處理工具:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- 使用上方步驟 1 顯示的管理 API 呼叫,重新檢查 API Proxy 的部署狀態。如果沒有錯誤,表示問題已解決。
- 確認訊息處理器是否正在監聽通訊埠 4528:
- 如果問題仍未解決,請按照下列步驟,測試管理伺服器與訊息處理器在 4528 連接埠的連線狀態:
- 如果可以使用 Telnet,請使用 Telnet:
telnet <MessageProcessor_IP> 4528
- 如果無法使用 Telnet,請使用 Netcat 檢查連線,方法如下:
nc -vz <MessageProcessor_IP> 4528
- 如果收到「Connection Refused」或「Connection timed out」的回應,請與網路作業團隊聯絡。
- 如果可以使用 Telnet,請使用 Telnet:
- 請按照下列步驟,測試訊息處理器與管理伺服器在通訊埠 4526 上的連線:
- 如果可以使用 Telnet,請使用 Telnet:
telnet <management-server-IP> 4526
- 如果無法使用 Telnet,請使用 Netcat 檢查連線,方法如下:
nc -vz <management-server-IP> 4526
- 如果收到「Connection Refused」或「Connection timed out」的回應,請與網路作業團隊聯絡。
- 如果可以使用 Telnet,請使用 Telnet:
- 與網路營運團隊合作,並執行下列操作:
- 確認管理伺服器和 Message Processor 都允許 RPC 通訊協定。
- 移除管理伺服器和訊息處理器之間設定的任何防火牆限制或安全性規則,允許連線至管理伺服器上的通訊埠 4526,以及從管理伺服器連線至訊息處理器上的通訊埠 4528。
- 再次檢查部署狀態 (請參閱上述步驟 1)。如果沒有看到任何錯誤,表示問題已解決。
- 如果問題仍未解決,請檢查訊息處理器是否有網路問題。如果發生網路問題,重新啟動顯示逾時錯誤的特定訊息處理器 (如部署狀態輸出內容所示),或許就能修正問題:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- 如果問題仍未解決,請檢查管理伺服器記錄:
(
/opt/apigee/var/log/edge-management-server/logs/system.log)。管理伺服器記錄中的呼叫逾時錯誤範例
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]
如果看到與上述範例類似的錯誤,請增加管理伺服器上的 RPC 逾時,這樣一來,即使網路速度變慢,管理伺服器也有時間連線至訊息處理器。
解析度
附註:只有 Edge 私有雲使用者才能執行下列步驟。如果您使用 Edge Public Cloud,請與 Apigee Edge 支援團隊聯絡。
- 請按照下列步驟增加 RPC 逾時時間:
- 如果檔案不存在,請在
/opt/apigee/customer/application/management-server.properties管理 伺服器電腦上建立檔案 。 - 在這個檔案中新增下列這行文字:
conf_cluster_rpc.connect.timeout=<time in seconds>
預設的 RPC 逾時值為 10,建議將其增加至 40 秒。設定方式如下:
conf_cluster_rpc.connect.timeout=40
- 確認這個檔案的擁有者是 apigee:
chown apigee:apigee /opt/apigee/customer/application/management-server.properties
- 重新啟動管理伺服器:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
- 如果您有多個管理伺服器,請在所有管理伺服器上重複上述步驟。
- 在 Edge UI 中或使用 Edge 管理 API 呼叫部署 API Proxy。如果 API Proxy 順利部署,表示問題已解決。
- 如果檔案不存在,請在
- 如果問題仍未解決,請從管理伺服器和訊息處理器收集
tcpdump 指令。在每個伺服器上啟用 tcpdump 指令,然後從 UI 或使用 Management API 啟動 API Proxy 的部署作業:
- 從管理伺服器執行下列 tcpdump 指令:
tcpdump -i any -s 0 host <message-processor-IP address> -w <File name>
- 從訊息處理器執行下列 tcpdump 指令:
tcpdump -i any -s 0 host <management-server-IP address> -w <File name>
- 請聯絡 Apigee Edge 支援團隊,協助您分析 tcpdump,並進一步排解問題。
- 從管理伺服器執行下列 tcpdump 指令:
大型 API Proxy 套件
診斷
- 檢查發生部署錯誤的 API Proxy 套件大小。
- 如果大小相當大 (10 MB 以上),訊息處理器可能需要更多時間才能啟用 API Proxy。
- 如果 API Proxy 套件大小超過 15 MB,請繼續參閱「 API Proxy 套件大於 15 MB」。
解析度
附註:只有 Edge 私有雲使用者才能執行下列步驟。如果您使用 Edge Public Cloud,請與 Apigee Edge 支援團隊聯絡。
在管理伺服器上延長 RPC 逾時時間,讓訊息處理器有足夠時間啟用大型 API Proxy 套裝組合。請按照下列步驟增加 RPC 逾時值:
- 如果管理伺服器電腦上沒有
/opt/apigee/customer/application/management-server.properties檔案,請建立該檔案。 - 在這個檔案中新增下列這行文字:
conf_cluster_rpc.connect.timeout=<time in seconds>
RPC 逾時的預設值為 10,建議將其增加至 40 秒。 設定方式如下:
conf_cluster_rpc.connect.timeout=40
- 確認這個檔案的擁有者是 apigee:
chown apigee:apigee /opt/apigee/customer/application/management-server.properties
- 重新啟動管理伺服器:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
- 如果您有多個管理伺服器,請在所有管理伺服器上重複上述步驟。
如果問題仍未解決,請聯絡 Apigee Edge 支援團隊尋求進一步協助。