当前位置:首页 >> 智能

内存优化-如何用于tcmalloc来提升内存性能?提升结果太不可思议

来源:智能   2025年03月24日 02:00

三、内置google-perftools:

1: #tar zxvf tar zxvf gperftools-2.1.tar.gz

2: #cd gperftools-2.1

3: #./configure

4: #make

5: #make install

四、TCMalloc坎撰写入到linux系统对中但会:

1: echo "/usr/local/lib"> /etc/ld.so.conf.d/usr_local_lib.conf

2: /sbin/ldconfig

五、TCMalloc坎关键字到你的程序来中但会:

要采用TCMalloc,只要将tcmalloc通过“-ltcmalloc”关键字支架图标接入你的运可用方可。

你也可以通过采用LD_PRELOAD在不是你自己重写的运可用中但会采用tcmalloc:

$ LD_PRELOAD="/usr/lib/libtcmalloc.so"

LD_PRELOAD比较麻烦,我们也不非常录用这种用法。

TCMalloc还自带含了一个大石安全检查支架以及一个大石测量支架。

如果你愈来愈想要关键字不自带含大石测量支架和安全检查支架的TCMalloc旧版本(比如不太可能为了减缓线性小数文件的个数),你应该关键字libtcmalloc_minimal。

測试预定义:

#include using namespace std; int main() { int *p = new int(); return 0; }

重写:g++ main.cpp -o main -ltcmalloc -g -O0

文件系统泄密安全检查: env HEAPCHECK=normal ./main

结果:

WARNING: Perftools heap leak checker is active 便是 Performance may sufferHe memory regions w/o callers: might report false leaksLeak check _main_ detected leaks of 4 bytes in 1 objectsThe 1 largest leaks:Using local file ./main.Leak of 4 bytes in 1 objects allocated from: @ 4007a6 main @ 7f1734263d1d __libc_start_main @ 4006d9 _startIf the preceding stack traces are not enough to find the leaks, try running THIS shell command:pprof ./main "/tmp/main.54616._main_-end.heap" 便是inuse_objects 便是lines 便是heapcheck 便是edgefraction=1e-10 便是nodefraction=1e-10 便是gvIf you are still puzzled about why the leaks are there, try rerunning this program with HEAP_CHECK_TEST_POINTER_ALIGNMENT=1 and/or with HEAP_CHECK_MAX_POINTER_OFFSET=-1If the leak report occurs in a small fraction of runs, try running with TCMALLOC_MAX_FREE_QUEUE_SIZE of few hundred MB or with TCMALLOC_RECLAIM_MEMORY=false, it might help find leaks more repeatablyExiting with error code (instead of crashing) because of whole-program memory leaks

这里不细话说文件系统泄密检查,我将专门社交一篇文章来比对文件系统泄密。

系统性视频录用

90分钟认识Linux文件系统虚拟化,numa的优势,slab的借助于,vmalloc的原思

linux文件系统管思情况-如何思造出自己的思维造出来,开发与甄选双丰收

自学位址:C/C++LinuxAPI开发/往常虚拟化师【零声教育】-自学视频教程-腾讯课堂

能够C/C++ LinuxAPI虚拟化师自学数据加在qun812855908提供(数据自带括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,点播,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费社交

TCmalloc的一些注册表和常量

我们可以通过注册表来控制tcmalloc的犯罪行为,通常有用的图标。

图标

绑定值

作用

TCMALLOC_SAMPLE_PARAMETER

0

抽样一段时间间隔

TCMALLOC_RELEASE_RATE

1.0

特赦未采用文件系统的可能性

TCMALLOC_LARGE_ALLOC_REPORT_THRESHOLD

1073741824

文件系统小得多资源分配阻抗

TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES

16777216

资源分配给线程外部的小得多文件系统上限

微调常量:

TCMALLOC_SKIP_mmap

default: false

If true, do not try to use mmap to obtain memory from the kernel.

TCMALLOC_SKIP_SBRK

default: false

If true, do not try to use sbrk to obtain memory from the kernel.

TCMALLOC_DEVMEM_START

default: 0

Physical memory starting location in MB for /dev/mem allocation. Setting this to 0 disables/dev/mem allocation.

TCMALLOC_DEVMEM_LIMIT

default: 0

Physical memory limit location in MB for /dev/mem allocation. Setting this to 0 means no limit.

TCMALLOC_DEVMEM_DEVICE

default: /dev/mem

Device to use for allocating unmanaged memory.

TCMALLOC_MEMFS_MALLOC_PATH

default: ""

If set, specify a path where hugetlbfs or tmpfs is mounted. This may allow for speedier allocations.

TCMALLOC_MEMFS_LIMIT_MB

default: 0

Limit total memfs allocation size to specified number of MB. 0 means "no limit".

TCMALLOC_MEMFS_ABORT_ON_FAIL

default: false

If true, abort() whenever memfs_malloc fails to satisfy an allocation.

TCMALLOC_MEMFS_IGNORE_MMAP_FAIL

default: false

If true, ignore failures from mmap.

TCMALLOC_MEMFS_MAP_PRVIATE

default: false

If true, use MAP_PRIVATE when mapping via memfs, not MAP_SHARED.

简化TCmalloc的一些犯罪行为

我们可以通过自带含malloc_extension.h头文件中但会的MallocExtension类提供了一些微调的终端来简化tcmalloc的犯罪行为来使得你的程序来超造出极低的效率。

绑定持续性下,tcmalloc将逐渐的特赦长一段时间未采用的文件系统给文件系统。tcmalloc_release_rate图标控制交回虚拟机对文件系统的速度大,你也可以长治特赦文件系统通过执行如下可用:

MallocExtension::instance()->ReleaseFreeMemory();

你比如说可以线程SetMemoryReleaseRate()来在接入时简化tcmalloc_release_rate的值,或者线程GetMemoryReleaseRate来查看当前特赦的可能性值。

MallocExtension::instance()->SetMemoryReleaseRate(10.0);

// 【0-10】最大值趋大,可回收速度趋太快,这个能够根据自己项目持续性的测试给一个最合思的常量。

当然你也可以通过以下终端来提供tcmalloc的系统性大石栈采用持续性:

MallocExtension::instance()->GetStats(buffer, buffer_length);MallocExtension::instance()->GetHeapSample(Wildstring);

MallocExtension::instance()->GetHeapGrowthStacks(Wildstring);

TCmalloc和PTMalloc的性能常量对比

PTMalloc2自带(过去不太可能是glibc的一部分了)自带含了一个单元的测试程序来t-test1.c。它但会产生一定总数的线程并在每个线程中但会顺利进行一系列资源分配和撤除资源分配;线程彼此间没有人任何无线电除了在文件系统资源分配支架中但会同步。

t-test1(放于tests/tcmalloc/中但会,重写为ptmalloc_unittest1)用一系列多种不同的线程总数(1~20)和小得多资源分配外观上(64B~32KB)接入。这些的测试接入在一个2.4GHz 双核心Xeon的RedHat 9系统对上,并落成了超线程技术, 采用了Linux glibc-2.3.2,每个的测试中但会顺利进行一百万次可用。在每个个案中但会,一次短时间接入,一次采用LD_PRELOAD=libtcmalloc.so。

示例的缩放揭示了TCMalloc对比PTMalloc2在多种不同的衡量指标下的性能。首必先,真实十度可用次数(百万)以及小得多资源分配外观上,针对多种不同总数的线程。用来生产商这些缩放的粗略(time工具的输造出)可以在t-test1.times.txt中但会找。

TCMalloc要比PTMalloc2愈来愈具有一致地伸缩性——对于所有线程总数>1的的测试,小资源分配超造出了分之一7~9百万可用十度,大资源分配减为了分之一2百万可用十度。单线程的个案则相对来说是要被剔除的,因为他只能持续保持单个处思支架通宵因此只能授予愈来愈少的十度常量。PTMalloc2在十度常量上有极低的标准差——某些大都峰值可以在小资源分配上超造出4百万可用十度,而在大资源分配上减为了<1百万可用十度。TCMalloc在绝大多数持续性下要比PTMalloc2太快,并且特别是小资源分配上。线程间的争用在TCMalloc中但会情况不大。TCMalloc的性能随着资源分配外观上的增加在而增加。这是因为每线程缓存当它超造出了阻抗(绑定是2MB)的时候但会被垃圾收集。对于愈来愈大的资源分配外观上,在垃圾收集之前只能在缓存中但会存储愈来愈少的单纯。TCMalloc性能在分之一32K小得多资源分配外观上附件有一个相对来说的下降。这是因为在每线程缓存中但会的32K单纯的小得多外观上;对于大于这个值得单纯TCMalloc但会从中但会央页面大石中但会顺利进行资源分配。

示例是十度CPU一段时间的常量(百万)以及线程总数的缩放,小得多资源分配外观上64B~128KB。

这次我们再一次碰到TCMalloc要比PTMalloc2愈来愈连续也极低效。对于多线程的持续性下,很多CPU一段时间被无用在轮流等待栓定上了)。

关于TCmalloc的一些详述

对于某些系统对,TCMalloc不太可能没有与没有人关键字libpthread.so(或者你的系统对上同等的两边)的API来短时间指导。它应该能短时间指导于采用glibc 2.3的Linux上,但是其他OS/libc的组合方式早不太可能过任何的测试。

TCMalloc不太可能要比其他malloc旧版本在某种程度上愈来愈吃文件系统,(但是倾向于没有人有其他malloc旧版本中但会不太可能消失的爆发性增长。)相比较是在启动时TCMalloc但会资源分配大分之一240KB的实际上文件系统。

不该试图将TCMalloc撰写入到一个接入中但会的小数程序来中但会(例如,在Ja中但会采用JNI)。小数程序来不太可能采用系统对malloc资源分配了一些单纯,并但会尝试将它们传达到TCMalloc顺利进行撤除资源分配。TCMalloc是没有处思这种单纯的。

积食消化不良怎么办
小孩子积食怎么调理好得快
哺乳期眼睛红是怎么回事
拉肚子拉水怎么止泻
什么原因会造成眼睛痛
腱鞘炎可以吃止痛药吗
气血虚弱吃什么中成药补得快
眼睛视疲劳用哪个眼药水
脸色黄怎么调理
颈椎病止痛
友情链接