现象
线上 nginx + php-fpm来实时处理请求, php处理请求时需加载我们写的扩展;
发现每次请求处理完都有少量的内存泄漏, 因为是线上实时服务, 长时间运行的话此内存泄漏不可忽视;
使用...查过去, 应该是调用zk的zoo_get_children所至, 代码如下:
String_vector children;
if (ZOK == zoo_get_children(zk_handle...:
struct String_vector {
int32_t count;
char * *data;
};
实际上表示一个字符串数组, count:包含的字符串个数,data: 字符串数组的指针..., 那么问题就很明显了,zoo_get_children中分配了data数组的内存, 又分配了data里包含的每个字符串的内存, 但没有释放;
使用 deallocate_String_vector(在...generated/zookeeper.jute.h中)来释放内存, 再次运行 ``valgrind --tool=memcheck --leak-check=full --log-file=.