处理更新时出错

您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档
信息

问题

通过 Edge 界面或 Edge Management API 调用部署 API 代理修订版本会失败,并显示错误“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 = []}

可能的原因

导致此错误的原因可能有很多种。以下是一些原因示例:

原因 详细说明 适用于
内存不足 Message Processor 用尽了 Java 堆空间,导致 API 代理部署失败。 私有云用户
API 代理软件包中存在错误 API 代理软件包存在可能导致 API 代理部署失败的错误。 私有云和公有云用户

建议先尝试的常见步骤

  1. 检查消息处理器日志 /opt/apigee/var/log/apigee/edge-message-processor/logs/system.log 中是否存在任何部署错误或异常堆栈轨迹
  2. 您通常会看到提供部署错误原因信息的堆栈轨迹。请仔细阅读堆栈轨迹,了解原因。

内存不足

诊断

注意:只有 Edge Private Cloud 用户可以执行以下步骤。如果您使用的是 Edge 公有云,请与 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 Private Cloud 用户可以执行以下步骤。如果您使用的是 Edge 公有云,请与 Apigee 支持团队联系。

增加消息处理器上的最大 Java 堆空间。

Java 堆空间上限由 JVM 属性 -Xmx 控制。若要增加消息处理器上的 Java 堆空间,请按以下步骤操作:

  1. 确定 Java 堆空间可以增加的内存量:
    1. 检查在文件 /opt/apigee/edge-message-processor/bin/setenv.sh 中针对最大堆空间值 max_mem 设置的当前值
    2. 使用系统上的 /proc/meminfo 命令获取 MemTotal(可用 RAM 总量)、MemFree(系统上未使用的物理 RAM 量)。
      1. 确保上述信息包含同一系统上存在的任何其他进程(例如边缘路由器等)所消耗的内存。
      2. 根据上述信息,确定可以为消息处理器增加多少 Java 堆空间。
      3. 例如,消息处理器上当前的最大堆空间为 1024MB,MemTotal 为 8GB (8192MB),MemFree 为 5GB (5120MB),您可以将 Java 堆空间上限增加到 3GB (3072MB)。
      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 代理软件包中存在错误

如果 API 代理中使用的任何政策出现任何错误,则部署将失败并显示错误“Unexpected error occurred while processing the updates”。

如需查看示例,请参阅这篇 社区帖子

诊断

注意:只有 Edge Private Cloud 用户可以执行以下步骤。如果您使用的是 Edge 公有云,请与 Apigee 支持团队联系。

  1. 查看消息处理器日志,了解与 API 代理部署相关的异常或错误。通过错误消息,您应该可以了解应该在 API 代理软件包中进行哪些更改才能解决问题。
  2. 如果消息处理器日志中未显示错误消息,请检查 API 代理修订历史记录中的差异。如果旧版修订版本顺利部署,请检查所做的代码更改。

分辨率

  1. 请在 API 代理软件包中进行必要的更改,以解决此问题。
  2. 还原 API 代理在部署中存在问题的所有代码更改。

如果问题仍然存在,请与 Apigee 支持团队联系以获取进一步帮助。