• 反模式简介
  • 所有反模式 政策反模式
  • 性能反模式
  • 一般反模式
  • 后端反模式
  • 用于私有云反模式的 Edge
  • 运行时错误目录
  • 产品错误策略方案
  • Playbook 简介
  • 诊断信息收集指南
  • 错误消息参考
  • 所有 playbook Analytics
  • 开发者门户 (Drupal)
  • 集成式门户
  • OpenLDAP
  • 界面/管理
  • NGINX(路由器)
  • PostgreSQL 错误代码 - Messaging.adaptors.http.flow.*
  • 错误代码 -protocol.http.*
  • SSL 握手失败 - 客户端证书有误
  • TLS/SSL 握手失败
  • 400 请求错误 - 向 HTTP 端口发送的普通 HTTP 请求
  • 400 请求错误 - SSL 证书错误
  • 499 客户端关闭连接
  • 500 内部服务器
  • 500 内部服务器 - 已启用流式传输
  • 502 网关无效
  • 504 网关超时 - 路由器超时
  • 单点登录/SAML
  • ZooKeeper
  • 适用于 Envoy 策略方案的 Apigee 适配器
  • Apigee 适配器简介(面向 Envoy 策略方案)
  • 所有 playbook Edge Microgate 策略方案
  • Edge Microgate 策略方案简介
  • 所有 playbook 集成式门户策略方案
  • 集成门户简介简介
  • 所有 playbook 政策错误策略方案
  • 政策策略方案简介
  • 政策运行时错误 政策部署错误
  • 服务请求简介
  • Apigee 服务请求 其他问题排查资源
  • 诊断工具和日志
  • Sosreport 工具
  • HTTP 状态代码
  • Private Cloud 问题排查指南(PDF 版本)
  • 跟踪记录、分析和其他资源
  • "faultstring": "Gateway Timeout", "detail": { "errorcode": "messaging.adaptors.http.flow.GatewayTimeout"

    哪些原因会导致网关超时?

    通过 Edge 平台发出的 API 请求的一般路径为 客户端 ->路由器 ->消息处理器 ->后端服务器 ,如下图所示:

    Edge 平台中的客户端应用、路由器和消息处理器通过 合适的超时值。Edge 平台预期在特定时间段内发送响应 根据超时值确定每个 API 请求的超时时长如果您在以下期限内没有收到回复, 指定的时间段,则返回 504 Gateway Timeout Error

    下表详细说明了 Edge 中何时可能会发生超时:

    显示网关超时错误的消息处理器日志示例

    2015-09-29 20:16:54,340 org:myorg env:staging api:profiles rev:13 NIOThread@1
    ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() :
    AbstractResponseListener.onError(HTTPResponse@4d898cf1, Gateway
    Timeout)
    2015-09-29 20:16:57,361 org:myorg env:staging api:profileNewsletters rev:8
    NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context$3.onTimeout
    
    
    
    
        
    () :
    SSLClientChannel[C:XX.XX.XX.XX:443 Remote
    host:192.168.38.54:38302]@120171 useCount=2 bytesRead=0
    bytesWritten=824 age=55458ms lastIO=55000ms .onTimeoutRead

    在上面的消息处理器日志中,您注意到后端服务器使用 IP 地址 XX.XX.XX.XX 即使在 55 秒后也未响应( lastIO=55000ms )。 因此,消息处理器超时并发送 504 Gateway Timeout 错误。

    <Property name="io.timeout.millis">120000</Property> </Properties> <URL>http://www.apigee.com</URL> </HTTPTargetConnection>

    然后,消息处理器在 55 秒后也不会超时,即使处于超时状态 值(55 秒)小于路由器上的超时值(57 秒)。这是因为 消息处理器上的 55 秒超时值会被替换为 在 API 代理中设置的 120 秒。因此,消息处理器的超时值 为 120 秒

    由于路由器的超时值(57 秒)低于在 API 代理,如果后端服务器在 57 小时后没有响应,则路由器将超时

  • 查看 NGINX 访问日志 ( /opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log )
  • 如果路由器在消息处理器之前超时,您将看到 504 的状态 访问 NGINX 访问日志,查看 API 请求的 message id 消息处理器将设置为 - 。这是因为路由器未收到任何响应 在路由器设置的超时时限内从消息处理器中发送。

    NGINX 日志条目示例,显示由于路由器超时而导致的 504

  • 在上面的示例中,请注意 NGINX 上 504 的状态,即 Message 处理器为 - ,总播放时间为 57.001 秒。这是因为路由器超时 57.001 秒后我们没有收到消息处理器的任何响应。
  • 在这种情况下,您会在消息中看到 Broken Pipe 异常 处理器日志 ( /opt/apigee/var/log/edge-message-processor/logs/system.log). )
    2017-06-09 00:00:25,886 org:myorg env:test api:myapi-v1 rev:23 messageid:rrt-mp01-18869-23151-1  NIOThread@1 INFO  HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.io.IOException: Broken pipe occurred while writing to channel ClientOutputChannel(ClientChannel[A:XX.XX.XX.XX:8998 Remote host:YY.YY.YY.YY:51400]@23751 useCount=1 bytesRead=0 bytesWritten=486 age=330465ms  lastIO=0ms )
    2017-06-09 00:00:25,887  org:myorg env:test api:myapi-v1 rev:23 messageid:rrt-mp01-18869-23151-1  NIOThread@1 INFO  HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace:
    java.io.IOException: Broken pipe
            at com.apigee.nio.channels.ClientOutputChannel.writePending(ClientOutputChannel.java:51) ~[nio-1.0.0.jar:na]
            at com.apigee.nio.channels.OutputChannel.onWrite(OutputChannel.java:116) ~[nio-1.0.0.jar:na]
            at com.apigee.nio.channels.OutputChannel.write(OutputChannel.java:81) ~[nio-1.0.0.jar:na]
    <snipped>

    之所以显示此错误,是因为路由器超时后会断开与 消息处理器。当消息处理器完成处理时,它会尝试向 对路由器做出响应由于与路由器的连接已经关闭,因此您会收到 针对消息处理器的 Broken Pipe exception 权限。

    在上述情况下预计会出现此例外情况。因此,实际 导致 504 Gateway Timeout 错误的原因是后端服务器需要较长的响应时间 您需要解决该问题。

  • 如果是自定义后端服务器,那么 <ph type="x-smartling-placeholder">
      </ph>
    1. 检查后端服务器响应时间过长的原因,看看能否 从而加快响应速度
    2. 如果无法修复/优化后端服务器,或者已知 请增加 超时值, 路由器和消息处理器
    3. 检查消息处理器是否遇到了较高的 CPU 或内存使用率: <ph type="x-smartling-placeholder">
        </ph>
      1. 如果任何消息处理器的 CPU 使用率较高,则生成三个 每 30 秒进行一次转储 dumps:
        JAVA_HOME/bin/jstack -l PID > FILENAME
      2. 如果任何消息处理器的内存用量较高,则生成 dump:
        sudo -u apigee JAVA_HOME/bin/jmap -dump:live,format=b,file=FILENAME PID
      3. 使用以下命令重启消息处理器。这应该会降低
        /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      4. 监控 API 调用以确认问题是否仍然存在。
      5. 请与 Apigee Edge 支持团队 联系并提供 线程转储、堆转储和消息处理器日志 ( /opt/apigee/var/log/edge-message-processor/logs/system.log) , 调查 CPU/内存用量高的原因。
      6. NodeJS 后端服务器在消息处理器的 JVM 进程中运行。通过 NodeJS 后端服务器的超时值,通过 nodejs.properties 文件中的 http.request.timeout.seconds 。这个 属性设置为 0,即默认情况下,所有发生超时的 属于由此消息处理器所提供服务的组织的 API 代理。因此,即使 NodeJS 后端服务器需要很长时间,消息处理器不会超时。
      7. 不过,如果 NodeJS 后端服务器耗时较长, 请求大于57 秒后,路由器将超时并发送 504 Gateway Timeout

        在这种情况下,通过 Edge 获取 API 请求响应所需的总时间 小于等于 50 秒。这包括发出 API 请求所用的时间, 由 Edge(路由器、消息处理器)处理,请求将发送到后端服务器 (如果适用)、后端处理请求并发送响应、Edge 处理 最后将其发送回客户端

        如果路由器在 50 秒内没有响应客户端,那么客户端将 超时并断开与路由器的连接。客户端将收到 504

        这会使 NGINX 设置状态代码 499 ,表示客户端已关闭

      8. 在这种情况下,您会在消息中看到 Broken Pipe 个异常 处理器日志 ( /opt/apigee/var/log/edge-message-processor/logs/system.log).
        )
        2017-06-09 00:00:25,886 org:myorg env:test api:myapi-v1 rev:23 messageid:rrt-1-11193-11467656-1  NIOThread@1 INFO  HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.io.IOException: Broken pipe occurred while writing to channel ClientOutputChannel(ClientChannel[A:XX.XX.XX.XX:8998 Remote host:YY.YY.YY.YY:51400]@23751 useCount=1 bytesRead=0 bytesWritten=486 age=330465ms  lastIO=0ms )
        2017-06-09 00:00:25,887  org:myorg env:test api:myapi-v1 rev:23 messageid:rrt-1-11193-11467656-1  NIOThread@1 INFO  HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace:
        java.io.IOException: Broken pipe
                at com.apigee.nio.channels.ClientOutputChannel.writePending(ClientOutputChannel.java:51) ~[nio-1.0.0.jar:na]
                at com.apigee.nio.channels.OutputChannel.onWrite(OutputChannel.java:116) ~[nio-1.0.0.jar:na]
                at com.apigee.nio.channels.OutputChannel.write(OutputChannel.java:81) ~[nio-1.0.0.jar:na]
        <snipped>
      9. 路由器超时后,会关闭与消息处理器的连接。当 消息处理器完成其处理,并尝试将响应写入路由器。 由于与路由器的连接已关闭,您将在消息处理器上获得 Broken Pipe exception
      10. 在上述情况下,这种例外情况属于正常情况。所以造成这种情况的 504 Gateway Timeout 错误仍然在于后端服务器需要很长时间才能做出响应, 您需要解决该问题。
      11. 如果这是您的自定义后端服务器,则: <ph type="x-smartling-placeholder">
          </ph>
        1. 检查后端服务器,确定用时超过 57 秒的原因,并查看是否 可以进行修复/优化,以提高响应速度。
        2. 如果无法修复/优化后端服务器,或者您知道 然后 增加超时值, 路由器和消息处理器
          <ph type="x-smartling-placeholder">
            </ph>
          1. 检查 NodeJS 代码是否调用了任何其他后端服务器, 需要很长时间才能返回检查这些后端服务器花费的时间较长的原因。
          2. 检查消息处理器是否遇到了较高的 CPU 或内存使用率: <ph type="x-smartling-placeholder">
              </ph>
            1. 如果消息处理器的 CPU 使用率较高,则生成三个 每 30 秒进行一次转储 dumps:
              JAVA_HOME/bin/jstack -l PID > FILENAME
            2. 如果消息处理器的内存用量较高,则生成 创建 Deployment
              sudo -u apigee JAVA_HOME/bin/jmap -dump:live,format=b,file=FILENAME PID
            3. 使用以下命令重启消息处理器。这应该会降低 CPU 和内存:
              /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
            4. 监控 API 调用以确认问题是否仍然存在。
            5. 请与 Apigee Edge 支持团队 联系并提供 线程转储、堆转储和消息处理器日志 ( /opt/apigee/var/log/edge-message-processor/logs/system.log) 帮助他们 调查 CPU/内存用量高的原因。
            6. 将以下代码行添加到此文件中:
              conf_load_balancing_load.balancing.driver.proxy.read.timeout=TIME_IN_SECONDS

              例如,如果要将超时值设为 120 秒,则设为

              conf_load_balancing_load.balancing.driver.proxy.read.timeout=120
            7. 确保此文件归 apigee 所有:
            8. 重启路由器:
              /opt/apigee/apigee-service/bin/apigee-service edge-router restart
            9. 如果有多个路由器,请在所有路由器上重复上述步骤。
            10. 消息处理器

            11. 在以下设备上创建 /opt/apigee/customer/application/message-processor.properties 文件: 消息处理器计算机(如果尚不存在)。
            12. 将以下代码行添加到此文件中:
              conf_http_HTTPTransport.io.timeout.millis=TIME_IN_MILLISECONDS

              例如,如果要将超时值设为 120 秒,则设为

              conf_http_HTTPTransport.io.timeout.millis=120000
            13. 确保此文件归 apigee 所有:
              chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
            14. 重启消息处理器:
              /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
            15. 如果您有多个消息处理器,请对所有消息重复上述步骤 创建 Deployment
              sudo -u apigee JAVA_HOME/bin/jmap -dump:live,format=b,file=FILENAME PID
            16. 使用以下命令重启消息处理器。这应该会降低
              /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
            17. 监控 API 调用并确认问题是否仍然存在。
            18. Apigee Edge 支持团队 联系并提供会话主题 转储、堆转储和消息处理器日志 ( /opt/apigee/var/log/edge-message-processor/logs/system.log) 帮助他们 调查 CPU/内存用量高的原因。
            19. 使用 API 监控来诊断问题

              借助 API Monitoring ,您可以快速分离问题领域,以诊断错误、性能和延迟问题及其来源。 例如开发者应用、API 代理、后端目标或 API 平台。

              逐步执行示例场景 ,了解如何使用 API 监控来排查 API 的 5xx 问题。 例如,您可以设置提醒,在 504 状态代码的数量超出特定阈值时收到通知。

              如未另行说明,那么本页面中的内容已根据 知识共享署名 4.0 许可 获得了许可,并且代码示例已根据 Apache 2.0 许可 获得了许可。有关详情,请参阅 Google 开发者网站政策 。Java 是 Oracle 和/或其关联公司的注册商标。

              最后更新时间 (UTC):2026-02-17。

              [[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2026-02-17。"],[],[]]
  •