由于某些原因我无法控制父进程,因此我尝试使用jemalloc进行内存配置,因此,除了在外部设置MALLOC_CONF env变量外,我尝试在程序内设置变量,但似乎无法正常工作。
我尝试过在外部设置MALLOC_CONF env,然后启动该过程。
以下是示例程序的代码段
void keep_mallocing(int count, size_t size, int **ptr) {
int i =0;
for(i=0; i
ptr[i] = malloc(size);
memset(ptr[i], 0, size);
}
}
void keep_freeing(int count, int **ptr) {
int i = 0;
for(i=0; i
free(ptr[i]);
}
}
void handle_sigusr1(int sig)
{
// malloc_stats_print(NULL, NULL, "g,l,b,h,m,a");
char *path = 0;
path = getenv( "MALLOC_CONF" );
printf("path : %s\n", path);
mallctl("prof.dump", NULL, NULL, NULL, 0);
return;
}
int
main(int argc, char **argv) {
signal(SIGUSR1, handle_sigusr1);
setenv("MALLOC_CONF", "prof:true,prof_prefix:jeprof.out", 1);
while(1)
{
int *ptr[10] = {0};
// count, bytes, ptr
keep_mallocing(10, 1000000, ptr);
sleep (1);
// count, ptr
keep_freeing(7, ptr);
sleep (5);
}
return 0;
}
我正在使用以下命令来编译代码(我已经尝试了静态和动态链接)
gcc -ggdb3 use_jemalloc.c -std=gnu99 -o abc /usr/local/lib/libjemalloc.a -lpthread -ldl -lm
如果我导出该变量然后运行,似乎工作正常
$ ls
abc use_jemalloc.c
$ export MALLOC_CONF="prof:true,prof_prefix:jeprof.out"
$ ./abc &
[1] 23220
$ kill -10 `pidof abc`
path : prof:true,prof_prefix:jeprof.out
$ ls
abc jeprof.out.23220.0.m0.heap use_jemalloc.c
但是,如果u使变量无效,则它不会生成任何东西
$ rm jeprof.*
$ ls
abc use_jemalloc.c
$ export MALLOC_CONF=
$ echo $MALLOC_CONF
$ ./abc &
[1] 23244
$ kill -10 `pidof abc`
path : prof:true,prof_prefix:jeprof.out
$ ls
abc use_jemalloc.c