21_Memory_leak_detection(内存泄漏检测)
备注:文章编写时间201904-201905期间,后续官方在github的更新没有被写入
~ ~ 内存泄漏检测[Memory leak detection] 从版本v1.3.0g开始,嵌入在ProxySQL中的jemalloc将使用--enable-prof选项进行编译,这将允许进行内存分析成为可能。默认情况下禁用内存分析。
要启用分析,需要在OS(/etc/profile)层面中设置环境变量 MALLOC_CONF 并重新启动proxysql以覆盖嵌入/默认的jemalloc配置。 当前的jemalloc配置是xmalloc:true,lg_tcache_max:16,purge:decay。要启用内存分析,需要启用prof和prof_leak,而且需要调整lg_prof_sample和lg_prof_interval。 建议的jemalloc内存分析器调整可能如下: "xmalloc:true,lg_tcache_max:16,purge:decay,prof:true,prof_leak:true,lg_prof_sample:18,lg_prof_interval:30"
因此,环境变量应该是:
MALLOC_CONF="xmalloc:true,lg_tcache_max:16,purge:decay,prof:true,prof_leak:true,lg_prof_sample:18,lg_prof_interval:30"
有关jemalloc配置的详细信息,请访问此处(http://jemalloc.net/jemalloc.3.html)。
一、[Start ProxySQL with memory profiler]
1、使用init脚本[using init script]
如果使用init脚本 /etc/init.d/proxysql 运行proxysql,则在启动进程之前添加附加的环境变量设置行就足够了,例如在/etc/init.d/proxysql中的第19行附近:
export MALLOC_CONF="xmalloc:true,lg_tcache_max:16,purge:decay,prof:true,prof_leak:true,lg_prof_sample:18,lg_prof_interval:30"
2、不使用init脚本启动[without init script]
如果没有使用init脚本/etc/init.d/proxysql运行proxysql的情况下,则需要确保在启动proxysql之前设置了OS的环境变量。例如,如果在前台运行proxysql,则需要执行类似于以下内容:
export MALLOC_CONF="xmalloc:true,lg_tcache_max:16,purge:decay,prof:true,prof_leak:true,lg_prof_sample:18,lg_prof_interval:30"
proxysql -f -c /etc/proxysql.cnf
二、如何报告内存泄漏?[How to report a memory leak?]
jemalloc 分析器将定期在 /var/lib/proxysql 中写入内存分析转存信息,名称为 proxysql.<pid>.<seq>.i<iseq>.heap 。 要报告内存泄漏,请创建一个tar包,其中包含Jemalloc分析器生成的内存信息转存文件,然后创建一个异常检测任务或给发送一封电子邮件给相关人员。还应该包括正在使用的ProxySQL的确切版本以及操作系统信息: 1)如果您使用rpm或deb包,请准确指定使用的是哪一个; 2)如果是自行编译proxysql,请在报告中包含proxysql的二进制文件。
三、禁用分析[Disable profiling]
要禁用分析,需要在未设置 MALLOC_CONF 环境变量的情况下重新启动ProxySQL即可。
完毕!