我们正在尝试追踪使用 jemalloc (5.2.0) 的 proxysql (2.0.14) 中的内存泄漏。我们在启用调试符号的情况下编译了 proxysql。烘焙到 proxysql中的 jemalloc 配置如下:
xmalloc:true,lg_tcache_max:16,prof:true,prof_leak:true,lg_prof_sample:20,lg_prof_interval:30,prof_active:false
内存分析在运行时启用,PROXYSQL MEMPROFILE START
如下所示。这会将内存分析设置为active
:
bool en=true;
mallctl("prof.active", NULL, NULL, &en, sizeof(bool));
这似乎在生成堆配置文件时起作用,但是当我们使用 jeprof 分析它们时,它似乎记录了所有内存分配,而不仅仅是内存泄漏。我们使用 jeprof 生成的 pdf 可以在这里找到。如您所见,jeprof 似乎显示了所有内存分配,而不仅仅是泄露的内存分配。
通过查看其他内存配置文件,它们显示的总内存量较小,而在此配置文件中,我们看到的总内存为 21GB,超过了服务器可以分配的内存量。但是,我们不确定问题出在哪里 - jeprof、配置或其他完全不同的东西。
作为参考,我们在此处添加了一个示例堆配置文件,以防万一这表明出了什么问题。