處理更新時發生錯誤

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

問題

透過 Edge UI 或 Edge 管理 API 呼叫部署 API Proxy 修訂版本時,會失敗並顯示「Unexpected error occurred while processing the updates」錯誤。

錯誤訊息

Error in deployment for environment sit.

The revision is deployed and traffic can flow, but flow may be impared. com.apigee.kernel.exceptions.spi.UncheckedException{ code = messaging.runtime.UpdateFailed, message = Unexpected error occurred while processing the updates, associated contexts = []}

可能原因

造成這個錯誤的原因有很多。以下列舉幾個可能原因:

原因 詳細資料 適用於
記憶體不足 訊息處理器用盡 Java 堆積空間,導致 API Proxy 部署失敗。 私有雲使用者
API Proxy 套件發生錯誤 API Proxy 套件發生錯誤,可能導致 API Proxy 無法部署。 私有雲和公有雲使用者

建議優先採取的常見步驟

  1. 檢查訊息處理器記錄檔 /opt/apigee/var/log/apigee/edge-message-processor/logs/system.log 中是否有任何部署錯誤或例外狀況堆疊追蹤記錄
  2. 您通常會看到堆疊追蹤,其中提供部署錯誤的原因資訊。請詳閱堆疊追蹤記錄,瞭解原因。

記憶體不足

診斷

附註:只有 Edge 私有雲使用者才能執行下列步驟。如果您使用 Edge Public Cloud,請與 Apigee 支援團隊聯絡。

  1. 您可能會在訊息處理器記錄中看到類似下圖的例外狀況: /opt/apigee/var/log/apigee/edge-message-processor/logs/system.log
    Apigee-Main-4 ERROR BOOTSTRAP - RuntimeConfigurationServiceImpl.dispatchToListeners() : RuntimeConfigurationServiceImpl.dispatchToListeners : Error occurred while dispatching the request DeployEvent{organization=myorg', application='person-credentials-api', applicationRevision='275', deploymentSpec=basepath=/;env=dev;, deploymentID=null} to com.apigee.application.bootstrap.listeners.MessageProcessorBootstrapListener@5db88cb8
    com.apigee.kernel.exceptions.spi.UncheckedException: Unexpected error occurred while processing the updates
            at com.apigee.entities.AbstractConfigurator.throwUncheckedException(AbstractConfigurator.java:280) ~[config-entities-1.0.0.jar:na]
            at com.apigee.messaging.configuration.MessageProcessorServiceImpl.configure(MessageProcessorServiceImpl.java:665) ~[message-processor-1.0.0.jar:na]
            at com.apigee.application.bootstrap.listeners.MessageProcessorBootstrapListener.configureMessageProcessorService(MessageProcessorBootstrapListener.java:54) ~[application-bootstrap-1.0.0.jar:na]
            at com.apigee.application.bootstrap.listeners.MessageProcessorBootstrapListener.deploy(MessageProcessorBootstrapListener.java:29) ~[application-bootstrap-1.0.0.jar:na]
            …<snipped>
            at com.apigee.application.bootstrap.proto.RuntimeConfig_ConfigRPCService_BlockingSkeleton$1.run(RuntimeConfig_ConfigRPCService_BlockingSkeleton.java:38) [application-bootstrap-1.0.0.jar:na]
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [na:1.7.0_75]
            at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_75]
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_75]
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_75]
            at java.lang.Thread.run(Thread.java:745) [na:1.7.0_75]
    Caused by: java.lang.OutOfMemoryError: Java heap space
  2. 訊息 Caused by: java.lang.OutofMemoryError: Java Heap space 表示訊息處理器已用盡 Java 堆積空間。

解析度

附註:只有 Edge 私有雲使用者才能執行下列步驟。如果您使用 Edge Public Cloud,請與 Apigee 支援團隊聯絡。

增加訊息處理器的 Java 堆積空間上限。

Java 堆積空間上限是由 JVM 屬性 -Xmx 控制。如要在訊息處理器上增加 Java 堆積空間,請按照下列步驟操作:

  1. 判斷 Java 堆積空間可增加的記憶體量:
    1. 檢查檔案 /opt/apigee/edge-message-processor/bin/setenv.sh 中為 max heap space (堆積空間上限) 和 max_mem 設定的目前值。
    2. 在系統上使用 /proc/meminfo 指令,取得 MemTotal (可用 RAM 總量) 和 MemFree (系統上未使用的實體 RAM 量)。
      1. 請確認上述資訊包含同一系統上任何其他程序 (例如 Edge 路由器等) 所耗用的記憶體。
      2. 根據上述資訊,判斷訊息處理器的 Java 堆積空間可增加多少。
      3. 舉例來說,如果訊息處理器的目前堆積空間上限為 1024 MB,MemTotal 為 8 GB (8192 MB),MemFree 為 5 GB (5120 MB),則可將 Java 堆積空間上限增加至 3 GB (3072 MB)。
      4. 如需協助判斷 Java 堆積空間的增加量,請與 Apigee 支援團隊聯絡。
  2. 如果下列檔案不存在,請加以建立:
    /opt/apigee/customer/application/message-processor.properties
  3. 在檔案中新增下列這行文字,並增加堆積設定 (例如 3072M):
    bin_setenv_max_mem=3072m
  4. 儲存檔案。
  5. 重新啟動訊息處理器:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  6. 如果有多個訊息處理器,請在所有訊息處理器上重複步驟 3 到 6。

如果問題仍未解決,請與 Apigee 支援團隊聯絡.

API Proxy 套件發生錯誤

如果 API Proxy 中使用的任何政策發生錯誤,部署作業就會失敗,並顯示「Unexpected error occurred while processing the updates」錯誤。

例如,請參閱這篇 社群貼文

診斷

附註:只有 Edge 私有雲使用者才能執行下列步驟。如果您使用 Edge Public Cloud,請與 Apigee 支援團隊聯絡。

  1. 檢查訊息處理器記錄檔,確認是否有與 API Proxy 部署相關的例外狀況或錯誤。錯誤訊息應會提供相關資訊,說明 API Proxy 套件中應變更哪些內容,才能解決問題。
  2. 如果訊息處理器記錄中未顯示任何錯誤訊息,請檢查 API Proxy 修訂版本記錄中的差異。如果舊版修訂內容可以順利部署,請檢查程式碼變更內容。

解析度

  1. 在 API Proxy 套件中進行必要變更,以解決問題。
  2. 將 API Proxy 的程式碼變更還原為部署時發生問題前的狀態。

如果問題仍未解決,請聯絡 Apigee 支援團隊尋求進一步協助。