CPU 占用率 45% 的“黑洞”:一次 APISIX “黑盒”插件的 C 级别性能诊断

💡 原文中文,约5300字,阅读约需13分钟。
📝

内容提要

本文回顾了一个电商平台APISIX网关的CPU瓶颈案例。传统工具无法定位问题,而OpenResty XRay通过动态追踪技术发现pkey_rsa_decrypt函数占用44.8% CPU,揭示了性能优化的关键。建议通过缓存解密结果和检查RSA密钥长度来提升系统性能。

🎯

关键要点

  • APISIX网关集群遭遇CPU瓶颈,传统工具无法定位问题。
  • OpenResty XRay通过动态追踪技术发现pkey_rsa_decrypt函数占用44.8% CPU。
  • API网关的性能和稳定性对现代微服务架构至关重要。
  • 客户的SRE团队尝试使用perf工具,但无法将C函数调用与Lua代码关联。
  • 传统采样工具在Lua与C库的边界上存在盲区,无法提供有效的优化指导。
  • OpenResty XRay使用动态追踪技术,能够非侵入式地重建完整调用栈。
  • pkey_rsa_decrypt函数的高CPU占用与RSA密钥长度和冗余计算有关。
  • 建议通过缓存解密结果和检查RSA密钥长度来提升系统性能。
  • 常规监控工具无法跨越LuaJIT VM的边界,导致归因困难。
  • OpenResty XRay能够提供跨越Lua和C的完整调用栈,帮助定位性能瓶颈。
  • 优化建议包括在cb-session-validation.lua中引入缓存机制和检查RSA密钥长度。

延伸问答

APISIX网关的CPU瓶颈是如何被发现的?

通过OpenResty XRay的动态追踪技术,发现pkey_rsa_decrypt函数占用44.8% CPU,定位了性能瓶颈。

传统工具在定位APISIX性能问题时存在哪些局限性?

传统工具无法跨越Lua与C的边界,导致无法将C函数调用与Lua代码关联,造成归因困难。

如何通过OpenResty XRay优化APISIX的性能?

建议在cb-session-validation.lua中引入缓存机制,并检查RSA密钥长度以提升性能。

pkey_rsa_decrypt函数为何会导致CPU占用过高?

其高CPU占用与RSA密钥长度过长和冗余计算有关,尤其是在会话验证阶段重复解密。

OpenResty XRay与传统监控工具相比有什么优势?

OpenResty XRay使用动态追踪技术,能够非侵入式地重建完整调用栈,提供更准确的性能分析。

在APISIX中,如何避免重复的RSA解密操作?

可以通过缓存解密结果,在会话有效期内避免对同一token重复执行解密操作。

➡️

继续阅读