处理更新时出错

您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
info

问题

通过 Edge 界面或 Edge 管理 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 = []}

可能的原因

导致此错误的原因可能有很多。下面列出了一些示例原因:

原因 详细信息 适用对象
内存不足 消息处理器 Java 堆空间不足,导致 API 代理部署 失败。 私有云用户
API 代理软件包中存在错误 API 代理软件包中存在可能导致 API 代理部署失败的错误。 私有云和公有云用户

建议优先尝试的常见步骤

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

内存不足

诊断

注意 :只有 Edge 私有云用户可以执行以下步骤。如果您使用的是 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 私有云用户可以执行以下步骤。如果您使用的是 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. 确保上述信息包含同一系统上存在的任何其他进程 例如 Edge 路由器等占用的内存。
      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 私有云用户可以执行以下步骤。如果您使用的是 Edge 公有云,请与 Apigee 支持团队联系。

  1. 检查消息处理器日志中是否存在与 API 代理 部署相关的异常或错误。该错误应提供有关应在 API 代理 软件包中更改哪些内容以解决问题的信息。
  2. 如果消息处理器日志中未显示任何错误消息,请检查 API 代理修订 历史记录中的差异。如果较旧的修订版本可以顺利部署,请查看所做的代码 更改。

解决方案

  1. 在 API 代理软件包中进行必要的更改以解决问题。
  2. 还原对 API 代理所做的任何代码更改,这些更改导致部署出现问题。

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