当前位置:首页 >> 药膳食疗 >> 内存优化-如何使用tcmalloc来提升内存稳定性?提升结果太不可思议

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

发布时间:2024-12-25

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文件系统对Core,numa的优势,slab的实现,vmalloc的原理

linux文件系统对监管关键问题-如何理单单自己的长处单单来,整合与面试双丰收

努力学习IP:C/C++Linux增个数机整合/于是就开发者【零声普及教育】-努力学习视频教程-百度课堂

并不需要C/C++ Linux增个数机开发者努力学习的资讯赞qun812855908利用(的资讯包内含C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费交友

TCmalloc的一些null和参数

我们可以通过null来控制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标志控制收回UNIX文件系统对的速率大,你也可以朔州释放单单来文件系统对通过拒绝执行如下系统对设计:

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(Maxstring);

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

TCmalloc和PTMalloc的机动性参数对比

PTMalloc2包内(现在仍然是glibc的一部分了)包内含了一个单元次测试处理程序t-test1.c。它亦会产生一定存量的缓存并在每个缓存中所同步进行一系列均等和冻结均等;缓存之间没有任何通信除了在文件系统对均等机中所同步。

t-test1(放在tests/tcmalloc/中所,处理程序代码为ptmalloc_unittest1)用一系列相同的缓存存量(1~20)和仅有均等大小(64B~32KB)运营。这些次测试运营在一个2.4GHz ARMXeon的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(或者你的系统对上同等的过道)的广泛应用处理程序较长时间社会活动。它应该能较长时间社会活动于用到glibc 2.3的Linux上,但是其他OS/libc的复合手段尚未曾经过任何次测试。

TCMalloc显然要比其他malloc旧版本在同样上更加吃文件系统对,(但是倾向于不亦会有其他malloc旧版本中所显然单单现的紧接著增长。)尤其是在启动时TCMalloc亦会均等至少240KB的内外文件系统对。

不要试图将TCMalloc载入到一个运营中所的十进制处理程序中所(例如,在Ja中所用到JNI)。十进制处理程序仍然用到系统对malloc均等了一些实例,并亦会无论如何将它们传递到TCMalloc同步进行冻结均等。TCMalloc是很难处理这种实例的。

黄石哪家白癜风医院好
莆田正规男科医院
广州医院
新冠买什么药
英太青对腰椎间盘突出好吗
结肠癌
食物寒凉引起肠胃不适怎么缓解好?
回南天湿气重怎么办
标签:
友情链接: