GPDB如何使用valgrind进行内存检测

2023-02-26 13:06:50 浏览数 (1)

GPDB中如何使用valgrind检测内存泄漏

GPDB中基于PostgreSQL的MPP的分布式数据库,我们在使用时会遇到内存泄漏的问题。通常我们会使用工具valgrind进行内存泄漏检测。但是,GPDB是分布式数据库,并且是多进程架构,Valgrind只能跟踪一个进程,它不能attach一个进程。那么如何在GPDB中使用valgrind进行内存检测呢?

GPDB的GitHub上有个话题进行了讨论,感兴趣的同学可以查看:

https://github.com/greenplum-db/gpdb/issues/5375

总结来说,GPDB中能使用valgrind工具吗?答案是能

使用方法如下:

代码语言:javascript复制
gpstart -a --wrapper=valgrind --wrapper-args "--leak-check=no --gen-suppressions=all --time-stamp=yes --trace-children=yes --log-file='/tmp/postgresql-%p'"

也就是通过--wrapper选项来指定valgrind工具,--wrapper-args来指定valgrind工具的参数。在GitHub讨论中,我们看到GPDB6中有个patch:

https://github.com/greenplum-db/gpdb/pull/10672

让pg_ctl重新使用wrapper功能,其实PG是支持的,只是在GPDB5中merge PG时将其去掉了,限制该patch又重新将这个功能合入了进来:也就是说PG也是可以使用valgrind工具进行内存泄漏检测的

代码语言:javascript复制
https://github.com/greenplum-db/gpdb/pull/10672/commits/6273ea7976e55b67c9f2956ced10c6ed8c482701

如果想使用valgrind的massif工具,那么可以使用下面命令:

代码语言:javascript复制
gpstart -a --wrappper=valgrind --wrapper-args="--tool=massif --trace-children=yes --log-file='/tmp/postgresql-%p'"

这里抛砖引玉,引出GPDB使用valgrind进行内存泄漏检测的方法,详细使用方法需要同学们亲手实践。

0 人点赞