OpenResty XRay 是一款动态追踪产品,它可以让您在不修改应用程序的情况下对在线应用程序进行分析。它的使用非常高效且安全。您可以在任何时候对任何运行中的进程进行深入的了解,就像对您的软件进行 X 光检查一样。

OpenResty XRay 支持的应用之一是 Kong,它是基于我们的开源 OpenResty 框架构建的一款流行的 API 网关软件。Kong 有一个灵活的扩展机制,允许您使用很多插件,包括由社区和您自己构建的插件。但有时候,这些插件可能会导致一些问题,如 CPU 瓶颈、高内存使用或内存泄漏。您怎样才能找出是哪个插件在制造麻烦,以及它的影响有多大呢?

这就是 OpenResty XRay 能派上用场的地方。它可以在任何运行中的 Kong 服务器实例中,对所有加载的插件的 CPU 和内存使用情况进行采样统计。您不需要为 Kong 安装任何特殊插件或构建选项。您只需要运行 OpenResty XRay 并将其指向你的 Kong 进程,就会见证它为您创造的奇迹。

在这篇文章中,我们将向您展示如何使用 OpenResty XRay 来分析服务器进程中 Kong 插件的 CPU 和内存使用情况。我们还将向您展示一些结果的例子,并解释它们的含义。

服务器进程中所有 Kong 插件的 CPU 使用情况

OpenResty XRay 可以对 Kong 进程进行一段时间的采样,从几秒到几分钟,这取决于该进程的繁忙程度。然后,它会向您展示 CPU 时间是如何在所有当前加载的插件之间分配的。

例如,这是由 OpenResty XRay 为一个 Kong 进程生成的饼图:

CPU 时间在所有加载的插件中的使用分布情况

如您所见,在这种情况下,prometheus插件占用了大部分 CPU 时间,其次是ip-restriction插件。其他插件的 CPU 使用量可以忽略不计。这意味着,如果您想优化 Kong 服务器的 CPU 性能,您应该关注这两个插件,看看是否可以改进或替换它们。

当然,这只是一个例子。在更复杂的 Kong 服务器中,您可能会看到更多的插件出现在这里,并且分布情况可能会根据流量和配置而有所不同。

Kong 插件中的 CPU 使用情况

OpenResty XRay 也可以帮助您深入了解所有 Kong 插件的详细信息,并查看哪些 Lua 或 C 代码路径消耗了更多的 CPU 时间。其中一个简单的方法是查看 Lua-land CPU 火焰图,如下所示:

这张图显示了采样期间在 CPU 上运行的 Lua 代码的调用栈。条形越宽,占用的 CPU 时间就越多。您可以将鼠标悬停在条形上以查看更多信息,例如函数名,文件名,行号,和 CPU 时间的百分比。

通过查看这张图,您可以快速发现您 Lua 代码中的热点或性能问题,并相应地进行优化。您还可以比较不同的插件或同一插件的不同版本,看看它们在 CPU 使用方面有何不同。

服务器进程中所有 Kong 插件的内存使用情况

同样,OpenResty XRay 可以轻松地对 Kong 服务器进程内的内存使用情况进行采样。

下面是由 OpenResty XRay 为同一 Kong 进程生成的另一个饼状图:

所有加载的 Kong 插件的内存使用分布

可以看到,在这种情况下,bot-detection插件占用了大部分内存,prometheus插件紧随其后。其他插件的内存使用量要低得多。这意味着如果您想减少 Kong 服务器的内存占用,您应该研究这两个插件,看看是否可以对它们进行优化或替换它们。

同样,这只是一个例子。在不同的 Kong 服务器中,您可能会看到不同的结果,这取决于配置的插件和其他设置。

Kong 插件中的内存使用情况

OpenResty XRay 也可以帮助您分析 Kong 插件内 Lua GC 对象的内存使用情况。一种简单的方法是查看 GC 对象引用火焰图,它显示了内存在所有 GC 对象引用路径上的使用分布情况。

这张图展示了在采样期间占用内存的 Lua GC 对象的引用路径。条形越宽,所占内存就越多。您可以将鼠标悬停在某个条形上,查看更多信息,如对象类型、大小和内存百分比。

通过查看这张图,您可以快速发现您 Lua 代码中存在的内存泄漏或效率低下的问题,并相应地进行优化。您还可以比较不同的插件或同一插件的不同版本,看看它们在内存使用方面有何不同。

服务器的额外负担

您可能想知道使用 OpenResty XRay 是否会影响 Kong 服务器的性能。答案是不会。当采样时,添加到 Kong 服务器进程的额外负担通常非常小,可以忽略不计。而在不采样的时候,进程运行速度则完全不受任何影响。

OpenResty XRay 的设计理念是非侵入性和轻量级。它不会干扰您的正常操作,也不需要对您的代码或配置进行任何更改。

下一步的计划

我们并未止步于此。未来还有更多让 OpenResty XRay 对您来说更加强大和有用的计划。我们正在开发的一些功能包括:

  • 显示 Kong 不同插件间的磁盘 I/O,网络 I/O 和其他资源指标的实时分布情况。这将帮助您识别系统中的瓶颈或热点,并相应地进行优化。
  • 支持其他技术栈和开源软件。我们希望使 OpenResty XRay 成为一种通用工具,可以分析任何在线应用程序,无论底层技术是什么。我们考虑的一些目标包括 Nginx 模块,Envoy 扩展,PostgreSQL 扩展,Perl/Python/Ruby 模块和库,以及更多。

如果您有任何建议或对更多指标或功能的需求,请告诉我们。我们一直在倾听您的反馈,并持续改进我们的产品以满足您的需求。

结论

在本文中,我们向您展示了如何使用 OpenResty XRay 来分析服务器进程中 Kong 插件的 CPU 和内存使用情况。我们还向您展示了一些结果的示例,并解释了它们的含义。

通过使用 OpenResty XRay,您可以轻松找出哪些插件比其他插件消耗更多资源,以及它们对整体性能有多大的影响。然后,您可以使用这些信息来优化您的 Kong 服务器,使其运行得更快更顺畅。

如果您想更多地了解 OpenResty XRay 产品以及它能够如何帮助您处理在线应用的其他方面的信息,请访问我们的网站联系我们以了解更多细节。

关于作者

章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。

章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴, 是 “边缘计算“、”动态追踪 “和 “机器编程 “的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJITGDBSystemTapLLVM、Perl 等,并编写过 60 多个开源软件库。

关注我们

如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:

我们的微信公众号

翻译

我们提供了英文版原文和中译版(本文)。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!