pgoneproxy使用tcmalloc来管理内存

非 Y 不嫁゛ 提交于 2020-03-01 17:35:41

    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来进行压测,可以看到处理能力也有提高。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!