Linux 系统之 OOM 解析.docx

上传人:王** 文档编号:1397512 上传时间:2024-07-06 格式:DOCX 页数:8 大小:83.65KB
下载 相关 举报
Linux 系统之 OOM 解析.docx_第1页
第1页 / 共8页
Linux 系统之 OOM 解析.docx_第2页
第2页 / 共8页
Linux 系统之 OOM 解析.docx_第3页
第3页 / 共8页
Linux 系统之 OOM 解析.docx_第4页
第4页 / 共8页
Linux 系统之 OOM 解析.docx_第5页
第5页 / 共8页
Linux 系统之 OOM 解析.docx_第6页
第6页 / 共8页
Linux 系统之 OOM 解析.docx_第7页
第7页 / 共8页
Linux 系统之 OOM 解析.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
资源描述

《Linux 系统之 OOM 解析.docx》由会员分享,可在线阅读,更多相关《Linux 系统之 OOM 解析.docx(8页珍藏版)》请在优知文库上搜索。

1、在实际的业务场景中,有没有发现这样一种场景:基于VM环境上面所部署的SpringBoot应用服务,往往在运行过程中将内存利用的足够“狠琐”,常常达到90%甚至以上,此时,很大一部分伙伴就开始叫”了。日:领导,内存不终了,赶紧扩容!(此刻,有大佬肯定在想:扩你妹,整天搞这些没用的)那个傻子是不是瘦了?不知道作为所谓的“技术”人员,大家是如何面对的,如何解决?本文将聚焦于1.inux内存结构、内存分析以及OOMkiller等3个方面以及第者多年的实践餐总结来进行解析.内存结构从宏观角度而言,内存管理系统是操作系统最至要的部分之一.在内存管理的系统调用方式,事实上,基于POSIX并没有给内存管理指定

2、任何的系统调用.然而,1.inux却有自己的内存系统调用,主要系统调用如下:系统鞫用描述S=brk(addr)改变数据段大小a=mmap(addr,len,prot,flags,fd,offset)进行映射s=unmap(addr,len)取消映射1.brk通过给出超过数据段之外的第一个字节地址来指定数据段的大小.如果新的值要比原来的大,那么数据区会变得越来越大,反之会越来越小.2、mmap和unmap系统调用会控制映射文件。mmp的第一个参数addr决定了文件映射的地址.它必须是页面大小的倍数.如果参数是0,系统会分配地址并返回a,第二个参数是长度,它告诉了需要映射多少字节。它也是页面大小的

3、倍数.prot决定了映射文件的保沪位,保护位可以标记为可读、可写、可执行或者这些的结合。第四个参数flags能够控制文件是私有的还是可读的以及addr是必须的还是只是进行提示.第五个参数fd是要映射的文件描述符.只有打开的文件是可以祓映射的,因此如果想要进行文件映射,必须打开文件;最后一个参数offset会指示文件从什么时候开始,并不一定每次都要从零开始.针对1.inux内存管理及实现,其实其涉及的面较广,较为宜杂,从计算机早期开始,我们在实际的业务场景中所使用的内存往往都要比系统中实际存在的内存多.为此,内存分配策略克服了这一限制,并且其中最有名的就是引入:虚拟内存(VirtualMemor

4、y),通过在多个竞争的进程之间共享虚拟内存,虚拟内存得以让系统有更多的内存,以方便维护系统资源的分配.先来张总概览图,具体如下所示:(此图源自网络)1.inux内存,通常被认为指的是物理内存,然而,只有内核才可以直接访问物理内存,IS程需要访问内存,1.inux内核则需要为每个进程都提供一个独立的虚拟地址空间,访问的是虚拟内存.通常而言,虚拟内存空间的内部被划分为内核空间和用户空间:1、进程在用户态,只能访问用户空间内存2,进程进入内核态才能访问内核空间内存3、每个进程都包含内核空间,但这些内核空间都关联相同的物理内存而针对内存映射,其主要将虚拟内存地址映射到物理内存地址,为了完成内存映射.内

5、核每个进程都维护了一张页表,记录虚拟地址和物理地址的映射关系,页表实际存储在CPU的内存管理单元MMU,这样处理器就可以亘接通过硬件找出要访问的内存.再来一张内核线形地址空间布局图,具体可参考如下“硬核示意图:ImcvAd*M(2MctweyM4signal-ooflags)in-vfork(p)task-unlock(p);return;*badnessSCore分数=物理内存页数+交换区页数+页及PageTableSt.*/points=get_nn_rss(p-imi)+get_mm_counter(p-mm,MM_SWAPENTS)+mm_pgtables_bytes(p-mm)/PAGE_SIZE;task-unlock(p);*利用以下公式对badnessscore值进行调整*/adj=totalpages/10O;points+=adj;*返回badnessscore,假如等于。,则返回1.*/returnpoints?points:1;)通过对BadnessScore计算函数的分析,我们可以发现OOMKi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件与维护

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!