"faultstring": "Gateway Timeout",
"detail": {
"errorcode": "messaging.adaptors.http.flow.GatewayTimeout"
Edge 平台中的客户端应用、路由器和消息处理器通过
合适的超时值。Edge 平台预期在特定时间段内发送响应
根据超时值确定每个 API 请求的超时时长如果您在以下期限内没有收到回复,
指定的时间段,则返回
504 Gateway Timeout Error
。
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>
-
检查后端服务器响应时间过长的原因,看看能否
从而加快响应速度
-
如果无法修复/优化后端服务器,或者已知
请增加
超时值,
路由器和消息处理器
。
-
检查消息处理器是否遇到了较高的 CPU 或内存使用率:
<ph type="x-smartling-placeholder">
</ph>
-
如果任何消息处理器的 CPU 使用率较高,则生成三个
每 30 秒进行一次转储 dumps:
JAVA_HOME/bin/jstack -l PID > FILENAME
-
如果任何消息处理器的内存用量较高,则生成
dump:
sudo -u apigee JAVA_HOME/bin/jmap -dump:live,format=b,file=FILENAME PID
-
使用以下命令重启消息处理器。这应该会降低
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
-
监控 API 调用以确认问题是否仍然存在。
-
请与
Apigee Edge 支持团队
联系并提供
线程转储、堆转储和消息处理器日志
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)
,
调查 CPU/内存用量高的原因。
-
NodeJS 后端服务器在消息处理器的 JVM 进程中运行。通过
NodeJS 后端服务器的超时值,通过
nodejs.properties
文件中的
http.request.timeout.seconds
。这个
属性设置为 0,即默认情况下,所有发生超时的
属于由此消息处理器所提供服务的组织的 API 代理。因此,即使
NodeJS 后端服务器需要很长时间,消息处理器不会超时。
-
不过,如果 NodeJS 后端服务器耗时较长,
请求大于57 秒后,路由器将超时并发送
504 Gateway Timeout
在这种情况下,通过 Edge 获取 API 请求响应所需的总时间
小于等于 50 秒。这包括发出 API 请求所用的时间,
由 Edge(路由器、消息处理器)处理,请求将发送到后端服务器
(如果适用)、后端处理请求并发送响应、Edge 处理
最后将其发送回客户端
如果路由器在 50 秒内没有响应客户端,那么客户端将
超时并断开与路由器的连接。客户端将收到
504
。
这会使 NGINX 设置状态代码
499
,表示客户端已关闭
-
在这种情况下,您会在消息中看到
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>
-
路由器超时后,会关闭与消息处理器的连接。当
消息处理器完成其处理,并尝试将响应写入路由器。
由于与路由器的连接已关闭,您将在消息处理器上获得
Broken Pipe
exception
。
-
在上述情况下,这种例外情况属于正常情况。所以造成这种情况的
504 Gateway Timeout
错误仍然在于后端服务器需要很长时间才能做出响应,
您需要解决该问题。
-
如果这是您的自定义后端服务器,则:
<ph type="x-smartling-placeholder">
</ph>
-
检查后端服务器,确定用时超过 57 秒的原因,并查看是否
可以进行修复/优化,以提高响应速度。
-
如果无法修复/优化后端服务器,或者您知道
然后
增加超时值,
路由器和消息处理器
。
<ph type="x-smartling-placeholder">
</ph>
-
检查 NodeJS 代码是否调用了任何其他后端服务器,
需要很长时间才能返回检查这些后端服务器花费的时间较长的原因。
-
检查消息处理器是否遇到了较高的 CPU 或内存使用率:
<ph type="x-smartling-placeholder">
</ph>
-
如果消息处理器的 CPU 使用率较高,则生成三个
每 30 秒进行一次转储 dumps:
JAVA_HOME/bin/jstack -l PID > FILENAME
-
如果消息处理器的内存用量较高,则生成
创建 Deployment
sudo -u apigee JAVA_HOME/bin/jmap -dump:live,format=b,file=FILENAME PID
-
使用以下命令重启消息处理器。这应该会降低
CPU 和内存:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
-
监控 API 调用以确认问题是否仍然存在。
-
请与
Apigee Edge 支持团队
联系并提供
线程转储、堆转储和消息处理器日志
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)
帮助他们
调查 CPU/内存用量高的原因。
-
将以下代码行添加到此文件中:
conf_load_balancing_load.balancing.driver.proxy.read.timeout=TIME_IN_SECONDS
例如,如果要将超时值设为 120 秒,则设为
conf_load_balancing_load.balancing.driver.proxy.read.timeout=120
-
确保此文件归 apigee 所有:
-
重启路由器:
/opt/apigee/apigee-service/bin/apigee-service edge-router restart
-
如果有多个路由器,请在所有路由器上重复上述步骤。
消息处理器
-
在以下设备上创建
/opt/apigee/customer/application/message-processor.properties
文件:
消息处理器计算机(如果尚不存在)。
-
将以下代码行添加到此文件中:
conf_http_HTTPTransport.io.timeout.millis=TIME_IN_MILLISECONDS
例如,如果要将超时值设为 120 秒,则设为
conf_http_HTTPTransport.io.timeout.millis=120000
-
确保此文件归 apigee 所有:
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
-
重启消息处理器:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
-
如果您有多个消息处理器,请对所有消息重复上述步骤
创建 Deployment
sudo -u apigee JAVA_HOME/bin/jmap -dump:live,format=b,file=FILENAME PID
-
使用以下命令重启消息处理器。这应该会降低
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
-
监控 API 调用并确认问题是否仍然存在。
-
与
Apigee Edge 支持团队
联系并提供会话主题
转储、堆转储和消息处理器日志
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)
帮助他们
调查 CPU/内存用量高的原因。
使用 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。"],[],[]]