如何使用 OpenResty XRay 排查 HTTP 504 超时错误
在本教程中,您将学习如何诊断线上 OpenResty 或 Nginx 服务器中 HTTP 504 网关超时错误的根本原因。通过只捕获有问题的 TCP 连接内的网络包,OpenResty XRay 减少了性能损耗。这个特性使它非常适合对性能开销和延迟有高要求的生产环境。这是我们强大的智能抓包技术。
问题:HTTP 504 网关超时错误
首先我们来看一下应用的访问日志。
可以看到日志里出现了 504 错误。
运行 ps
命令来查看应用的完整命令行。
可以看到这是由 OpenResty 官方的包仓库提供的标准 nginx 二进制可执行文件。
使用 OpenResty XRay 的引导式分析功能排查错误
我们可以使用 OpenResty XRay 来对这些 504 错误响应进行实时分析,并找出根本原因。
在浏览器中打开 OpenResty XRay 的 Web 控制台。
确保当前分析的机器是正确的。
如果不对,我们可以在下面的列表重新选择。
进入 “Guided Analysis” 页面。
这里可以看到系统能分析的不同类型的问题。
选择 “Errors & exceptions”。
点击 “Next”。
选择之前看到的 OpenResty 应用。
这里我们不指定某一个进程。
选择 “整个应用”。
确保应用的类型是正确的。通常默认值就是对的。
OpenResty XRay 可以在多种不同语言的级别上进行分析。这里保持 Lua 和 C/C++ 都选中。
我们还可以设置最长的采样时间。这里保持默认的 300 秒不变。
开始分析。
系统将持续执行多轮分析。目前它正在运行第一轮分析。
第一轮分析已经完成,现在进入第二轮。对这个例子来说,运行一轮分析就够了。
停止分析。
这里显示了系统正在为本次分析生成报告。
可以看到自动生成了一份分析报告。
这是我们要分析的问题类型,“Errors & Exceptions”。
第一个问题就是关于 HTTP 响应状态码 504 的。
整个 HTTP 请求耗时超过了 3 秒。
相对于前一个网络包,延时最长的网络包是这个 TCP 包 “Push 和 ACK”。
前一个网络包是 ACK 包。
这两个包之间的延时超过 3 秒。
延时最长的网络包是由上游服务器发送给当前服务器的。上游服务器的端点地址显示在这里。
您也可以看到当前服务器的端点地址。
OpenResty XRay 只对实际发生 504 错误的 TCP 连接进行抓包,因此性能损耗极低。这非常适合对性能和延时有极高要求的生产环境。
点击 “More” 查看更多细节。
这是 HTTP 请求的 URI。
横坐标是网络包的序号,从 1 开始单调上升。
纵坐标显示了网络包相对于前一个网络包的延时。值越大,延时越长。
小方块代表了由当前服务器向外发送的网络包。
而小圆圈则表示当前服务器接收到的网络包。
把鼠标移到这个延时最长的网络包上。可以看到延时数据,它是当前服务器接收到的。
基于以上数据,系统得出结论:当前服务器在等待上游服务器的网络包时触发了超时错误。
它也给出了针对这个问题的根本原因分析:上游服务器速度慢。
或者当前服务器与其上游服务器之间的网络连接慢。
或者当前服务器对那个上游服务器的超时设置太短了。
它也给出了详细的建议。
这是另一种 HTTP 504 错误。当前服务器在上游服务器长时间未响应后,主动关闭了当前连接。
从这里您可以清楚地看到,带有 FIN 和 ACK 标志的 TCP 网络包相对于前一个网络包有最长的延时。这表示当前服务器主动发起了关闭连接的操作。
所以结论是,当前服务器在等待上游服务器的网络包时触发了其配置的超时保护,因而放弃等待并主动关闭了当前连接。
系统给出了针对这个问题的根本原因分析:上游服务器速度慢。
或者上游和当前服务器之间的网络连接慢。
或者当前服务器对那个上游服务器的超时设置太短了。
全自动分析与报告
OpenResty XRay 也可以自动监控在线进程,并生成分析报告。进入 “Insights” 页面。
您可以在 “Insights” 页面中找到以日和周为周期的报告。
所以您不是非得用 “Guided Analysis” 功能。
当然,“Guided Analysis” 对于应用的开发和演示是很有用的。
如果您喜欢这个教程,请订阅这个博客网站和我们的 YouTube 频道 或 B 站频道。谢谢!
关于 OpenResty XRay
OpenResty XRay 是一个动态追踪产品,它可以自动分析运行中的应用程序,以解决性能问题、行为问题和安全漏洞,并提供可行的建议。在底层实现上,OpenResty XRay 由我们的 Y 语言驱动,可以在不同环境下支持多种不同的运行时,如 Stap+、eBPF+、GDB 和 ODB。
关于作者
章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。
章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴, 是 “边缘计算“、”动态追踪 “和 “机器编程 “的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJIT、GDB、SystemTap、LLVM、Perl 等,并编写过 60 多个开源软件库。
关注我们
如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:
翻译
我们提供了英文版原文和中译版(本文)。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!