pgoneproxy使用tcmalloc来管理内存

    pgoneproxy自己是使用glib来进行操做的,故有部分的内存管理功能。glib中提供了g_slice_alloc,g_slice_alloc0,g_slice_new, g_slice_new0, g_slice_free1,g_slice_free来进行内存的管理。经过这些函数来申请内存时,是根据大小到内存池或者调用系统内存分配函数来申请内存的。函数

    可是pgoneproxy中使用了大量的g_new0,g_new,g_free函数,这些函数经过glib代码能够知道是经过直接调用系统函数来分配内存的。故会大量的调用系统的malloc以及free函数。在运行时能够经过perf top来观察获得下面的状况:优化

从上面中能够看到_int_malloc,_int_free函数占有很大的比例。这些函数应该就是直接调用glibc中malloc函数以及free函数致使的。目前想把这个状况给优化掉,故采用了Google的tcmalloc。在连接时连接了/usr/local/lib/libtcmalloc_minimal.a静态库。这样能够经过tcmalloc来管理内存的申请,从而减小glibc中malloc,free函数的调用,从而减小系统函数的调用。内存

增长tcmalloc后,perf top的结果以下所示:内存管理

从上面的样本能够看到没有了_int_malloc,_int_free函数了。而且经过pgbench来进行压测,能够看处处理能力也有提升。im

相关文章
相关标签/搜索