月度存档: 6 月 2024

合成配方

APISIX内存问题

最近在使用apisix做一个接入网关,遇到比较多的内存相关问题:

使用apisix版本3.7.0,生产集群中遇到内存持续缓慢增长的现象,google后官方确实有个etcd timer相关的内存泄漏bug:https://github.com/apache/apisix/pull/10614

测试环境修复此bug后,压测验证仍存在内存增长问题。压测环境为

  1. 模拟随机报文发送(1k~1m) -> apisix (ext-plugin <-> JavaPluginRunner) -> Server — 1k tps压测几分钟后,系统出现oom
  2. 模拟固定报文发送(4k) -> apisix (ext-plugin <-> JavaPluginRunner) -> Server — 1k tps压测,openresty进程内存占用稳定

github中找到了类似的问题:https://github.com/apache/apisix/issues/8461,但官方并没有认可此bug并给修复。修改apisix/plugins/ext-plugin/init.lua后,重新进行1压测,内存已稳定。

推测为flatbuffers.builder的Clear没有清理buffer内存,为提高性能采用了复用的策略,在此场景1下会导致每个buffer都会增长到接近1m的大小,导致内存占满;