云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

虚拟主机_静态库cdn_三重好礼

小七 141 0

海外云服务器_如何选择_云计算数据存储

最近,大数据分析是什么,我们的站点可靠性工程团队开始注意到一些Redis实例的内存压力,这些实例的工作集非常小*1。当我们开始深入研究这个问题时,很明显,在初始分配之后释放内存存在问题,因为"redis server"进程分配的密钥数量相对较少,但内存量相对较大。尽管最初看起来像是一个漏洞,但问题实际上是一个备用内存分配器和透明的巨型内存分配器之间的问题背景页你已经知道什么是透明的大页面,以及"madvise(2)"是如何工作的,你可以浏览一下这一部分。对于那些不知道的人,电子商务数据分析,读一读等等什么是页面?页是处理器分配使用的内存块,通常为4kb块。当应用程序必须访问虚拟内存时,它必须将其虚拟内存地址解析为页面的物理地址。物理地址和映射的虚拟内存之间的中介称为页表。在4kb页面中,每分配1GB内存,联通物联网,页表中就有262144个条目——当然,页表中的页面越多,翻译所需的时间就越长地址。虚拟内存使页面管理变得更加复杂,因为它允许应用程序寻址主存中实际上不存在的页面。当这种情况发生时,它会导致一个错误,但是内核知道如何处理虚拟内存中的错误,并且会在应用程序不知道故障的情况下从辅助存储(例如本地旋转生锈或闪存、NAS等)中拉出页发生了。好吧,什么是(透明)大页面?巨大的页面正是它们听起来的样子——比4kb大得多的页面。它们减少了页表中的条目数,从而减少了查找特定范围的虚拟内存所需的表查找次数映射的.Linux实现对大页面*2的支持,这需要更改在用户空间中运行的软件,以利用这些潜在的性能优势。它们有两种类型(2MB和1GB—可用大小取决于使用的CPU),并且必须在引导时通过传递给内核。那个大页面的实现本身是相当无聊的,所以让我们来谈谈透明的大页面。这就是乐趣所在用户开始航天软件传统上必须实现自己对巨大页面的支持,但这很难做到,而且需要大量测试才能有效利用。与其让这些用户空间应用程序管理它们与大页面的交互,透明的大页面允许应用程序使用巨大的页面…。嗯,很明显。这表现为内核对分配、标记和随后释放(在我们的例子中)2MB底层内存进行一些额外的管理几页。这个所有这些听起来都很有用,但事实证明,一些备用内存分配器不能很好地处理透明的大页面。madvise(2)`madvise(2)`不是POSIX的一部分,但它的灵感来自POSIX函数`POSIX_fadvise(2)`*3。它向内核提供建议,告诉内核在需要逐出页面时应该如何处理特定范围的内存。必须针对从地址开始的特定内存范围(此后为"n"字节)提供建议地址。它同时在建议中传递一个参数,例如"释放此地址和'n`字节,只要你准备好了"(`MADV_DONTNEED`)或"此地址和'n`字节后不久将被使用,所以您可能应该阅读一些内存分配器,比如glibc中的内存分配器,不使用madvise(2)标记页面。但是,`jemalloc(3)`*确实*用'madvise(…,MADV峎DONTNEED)`标记范围,但是需要注意的是,它在一个范围上,而不是在特定页面或组的"左"和"右"边缘几页。所以怎么了?当一个"redis server"进程最近被转移到"LD\u PRELOAD"时,这个漏洞就开始了``杰马洛克`,开始使用大量内存。最初的迹象表明,使用替代分配器可能是问题的一部分,所以这就是我们开始的地方挖掘。它结果表明,`jemalloc(3)`广泛地使用了'madvise(2)`来通知操作系统,大数据分析培训机构,它使用了以前'malloc'所使用的内存范围。因为机器使用的是透明的大页面,页面大小是2MB。因此,许多被标记为"madvise(…,MADV iu DONTNEED)"的内存在很大程度上小于2MB的范围内。这意味着操作系统永远无法逐出范围标记为"MADV_DONTNEED"的页面,因为必须不需要整个页面才允许它这样做重复使用。所以尽管一开始看起来像是一个漏洞,但由于"madvise(2)"和透明的大页面,操作系统本身无法释放内存。*4这导致了机器持续的内存压力,"redis server"最终获得了OOM被杀关于内存分配的错误在数据存储中通常变得更加明显,因为它们倾向于以相对快速的速度分配和释放内存。我们使用Redis作为临时作业的缓存和队列,这意味着它根据我们正在执行的操作类型分配和释放大量内存。2.巨大的页面也被作为超级页面并入其他一些广泛使用的Unix内核中,如FreeBSD;同样的概念在Windows上也可用作大页面。尽管名称不同,但功能基本相同。3.undefined专门针对文件访问,而不是直接内存管理,它将文件描述符作为第一个参数,而不是指向地址的指针。4.请注意,通过undefined无法禁用透明的大页。相反,全球云购,它需要在引导时或引导后手动将设置回显到未定义的状态。未定义或手动输入:``[html]{`如果test-f/sys/kernel/mm/transparent_hugepage/enabled;则echo never>/sys/kernel/mm/transparent_hugepage/enabled fi如果test-f/sys/kernel/mm/transparent_hugepage/defrag;则echo never>/sys/kernel/mm/transparent_hugepage/defragfi`}```