欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    Linux 虚拟内存参数配置.docx

    • 资源ID:1466350       资源大小:33.92KB        全文页数:9页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Linux 虚拟内存参数配置.docx

    一、问题出发点Jun110:30:21auditlkernel:swapper:pageallocationfailure,order:1,mode:0×20Dun110:30:21auditlkernel:Pid:,comm:swapperTainted:GT2.6.32-431.20.3.el6.×86-64#1JUn110:30:21auditlkernel:CallTrace:Dun110:30:21auditlkernel:<IRQ>(<ffffffff8112f80a>?_alloc-pages-nodemask+x74a0x8dJUn110:30:21auditlkernel:<ffffffff8116e242>?kmem-getpages+×62×17Jun110:30:21auditlkernel:<ffffffff8116eeSa>?fallback-alloc+0×lba0×270JUn110:30:21auditlkernel:<ffffffff8116ebd9>)?CaChe_a】IOJnode+0x99/0x160JUn110:30:21auditlkernel:<ffffffff8116fb5b>?kmem-cache-alloc*×llb0×19JUn110:30:21auditlkernel:<ffffffff8144cde8>?sk_prot_alloc+0x48/0xlc0JUn110:30:21auditlkernel:(<ffffffff8144dff2>)?sk-clo11e+0×22x2eDun110:30:21auditlkernel:<ffffffff8149f9c6>?inet-csk-clone+×16xdJun110:30:21auditlkernel:<ffffffff814b9293>?tcp_create_openreq_child*0x23/0x470在监控中,发现InCSSafleS日志中出现failure报错信息,发现如上内存堆栈报错。二、虚拟内存介绍IjHa内存毋用置疑,虚拟内存绝对是操作系统中最重要的概念之一.我想主要是由于内存的电要“战略地位,CPU太快,但容做小且功能单一,其他I/O硬件支持各种花式功能,可是相时于CPU,它们又太慢.于是它们之间就需要一种润滑剂来作为缓冲,这就是内存大显身手的地方。而在现代操作系统中,多任务已是标配“多任务并行,大大提升了CPU利用率,但却引出J'多个进程对内存操作的冲突向即,虚拟内存极念的提出就是为了解决这个问题,上图是虚拟内存量简单也是宜观的解算.操作系统有一块物理内存(中间的部分),有两个诳程(实际会更多)Pl和P2,操作系统偷偷地分别告诉Pl和P2,我的整个内存:都是你的,的使用,管够,可事实上呢,操作系统只是给它们画了个大tft这些内存说是都给了Pl和P2,实际上只给了它们一个序号而已.只有当Pl和P2其正开始使用这些内存时,系统才开始使用辍转掘移.拼凑出名个块给进程用,P2以为自己在用A内存,实际上已经被系统悄悄理定向到我正的B去J',甚至,当Pl和P2共用了C内存,他们也不知道.操作系统的这种欺啸进程的手段,就是虚拟内存.对PI和P2等进程来说,它们都以为自己占用了整个内存,而自己使用的物理内存的哪段地址,它们并不知道也无需关心。2 .分页和页表虚拟内存是操作系统里的概念,对操作系统来说,虚拟内存就是一张张的对照表,Pl获取A内存里的数据时应该去物理内存的A地址找.而找B内存里的数据应该去物理内存的C地址.我们知道系统里的墙本单位都是BYte字节,如果将每一个虚拟内存的BVte都对应到物理内存的地址.都个条目最少需要8字节(32位虚拟地址->32位物理地址),在4G内存的情况K就需要32GB的空间来存放对照表那么这张表就大得真正的物理地址也放不下了,于是操作系统引入了页(Page)的概念.在系统启动时,操作系统将整个物理内存以4K为单位,划分为各个页,之后进行内存分配时,都以页为单位,那么虚拟内存页对的物理内存页的映射表就大大减小了,4G内存,只需要8M的映射表即可,一蛭进程没有使用到的虚拟内存,也并不需要保存映射关系,而且1.inUX还为大内存设H了多级页表,可以进一页减少了内存消耗。操作系统能拟内存到物理内存的映射表,就被称为页表.3 .内存寻址和分配我们知道通过虚拟内存机制,每个进程都以为自己占用全部内存,进程访问内存时,操作系统都会把进程提供的虚拟内存地址转换为物理地址,再去时应的物理地址上获取数据。CPU中有一种硬件,内存管理的元MMU(MemoryManagementUnit)专门用来将期译虚拟内存地址。CPU还为页表寻址设置了缓存策略由于程序的局部性,其缓存命中率能达到98%.以上情况是页表内存在虚拟地址到物理地址的映射,而如果进程访问的物理地址还没有被分配,系统则会产生一个缺页中断,在中断处理时,系统切到内核态为进程虚拟地址分配物理地址04 .zone内存管理的机关逻辑都是以zone为球位的,这里zone的含义是指内存的分区管理,Unux将内存分成多个区,主要有点接访问区(DMA)、一般区(NormaI)和高端内存区(HighMemor).j内核时内存不同区域的访问因为硬件结构因素会有寻址和效率上的差别.如果在NUMA架构匕不同CPU所管理的内存也是不同的zone.5 .NUMANUMA中,虽然内存直接访问在CPU上,但是由于内存被平均分配在了各个CPU上.只有当CPU访问自身宜接访问内存时应的物理地址时,才会有较短的响应时间(后称1.ocaIAccess)o而如果需要访问其他CPUattaeh的内存的数据时,就需要通过万联通道访问,响应时间就相比之前变慢了(后称RemOteACCess)。所以NUMA(Non-UniformMemoryAccess)就此得名.三、分析1 .fl:官方解狎(RootCause),在RHE1.6.4之前kswapd不会尝试择放连续页面,当系统中没有其他碎片整理内存时,这可能导致GFP_ATOMlC分配请求反更失败.使用RHEI.6.4和更高版本时,如果需要,kswapd将压缩(碎片整理)可用内存.请注:t,分配失败仍然可能发生.例如,当出现较大的GFP_ATOMIC分配突发时,kswapd可能难以跟上.但是,这些分配最终应该会成功.2 .红M事件回复建议设武如下内核参数:1) vm.r>in-free-kbytes系统默认:rootglocalhost-#cat/proc/5ys/vm/min_free_kbytes4556rootnodellogffsysctl-agrepvm.minvm.min_free_kbytes-45056建议设置为:vm.min_free_kbytes=450560即增大该值的设置.2) vm.zone_reclaim_mode系统默认为0:(rootg)loca!hostsysctl-agrepvm.zone_reclaim_modevm.zone_reclaim_mode=0建议设置vm.zone_redaim_mOde=1到etcssctl.conf文件。具体如下:#Vilnetcsysctl.conf#打开该文件,追加或修改为如下设置(其他参数不变:vm.min_free_kbytes=4556vm.zonereclaimmode=1设置之后,保存退出。写入到该文件中的参数,执行SySCtl-P可即时生效,卜.次垂启将读取该文件的设置.3) VirtualIienOry相关参数介绍3.1. v三.Sirappiness控制换出运行时内存的相对权用.SWaPPineSS参数值可设置范围在。到100之间.低参数值会让内核尽量少用交换,更高参数值会使内核更多的去使用交换空间.默认值为60(参考网络资料:当剩余物理内存低于40%(40=100-60)时,开始使用交换空间,对于大多数操作系统,设置为100可能会影响整体性能,而设置为更低值(甚至为0)则可能破少响应延迟。SWaPPineSS的伯的大小对如何使用swap分区是有着很大的联系的。先前,人们建议把Vmswapiness设汉为0,它意味若“除非发生内存薇处,否则不要进行内存交换“。直到IJrUlX内核35E版本发布,这个值的意义才发生了变化。这个变化被一直到其他的发行版本上,包括RedHat企业版内核2632303.在发生变化之后.0意味若“在任何情况下慈不要发生交换。所以现在建议把这个值设置为KSWaPPineSS100的时候表示枳极的使用swap分区,并且把内存上的数据及时的搬运到SWaP空间里面,推券值tvm.swapplness=103.2. vs.Bin-fre-kbytes用干强制1.inuxVM保留最小数擅的千字节,VM使用该数字为系统中的每个低内存区域计算水位线WMARK_MIN)tfi.每个Iowmem区域根据其大小成比例地获得许多保留的空闲页面。雨要一些最小的内存来满足PF_MEMAIIoC分配:如果将此值设设为小于1024KB,则系统将被破坏,并在高负载下易于死锁,设置得太高将立即使您的机器OOM这个参数本身决定了系统中每个zone的Watermarkmin)的位大小,然后内核根据min的大小并参考每个ZOne的内存大小分别算出每个zone的Iow水位和high水位侑,从上面的解释中主要有如卜两个点:1 .代表系统所保用空闲内存的最低限2 .用于计算影响内存回收的三个参数watermarkminlowhigh而系统空闲内存低于WatermarkUOw时,开始启动内核线程kswapd世行内存回收.直到该zone的空闲内存数量达到Watermarkhigh后停止El收.如果上层申请内存的速度太快,导致空闲内存降至Watermarkmin后,内核就会遂行directreclaim(直接回收),即直接在应用程序的进程上下文中进行回收,再用回收上米的空闲页满足内存中请,因此实际会阻塞应用程序,带来一定的响应延迟,而且可能会触发系统OoM.这是因为Watermarkmin以下的内存属于系统的自用内存,用以满足特殊使用,所以不会给用户态的普通申请来用。三个Watermark的计算方法:watermarkmin-1QfreeJcbytes换算为page单位即可.故设为min_free_pages.watermarklow=watermarkmin)54watermark(high=watermark(min3/2Definesapercentagevalue.Writeoutofdirtydatabeginsinthebackground(viapdflush)whendirtydatacomprisesthispercentageoftotalmemory.ThedefaultvalueIs10.Fordatabaseworkloads,RedHatrecommendsalowervalueof3.Settingmin_free_kbytestoohighwillcausesystemhangs,eseciallyin386arch,usinglessthan5%oftotalmemorycanavoidit,sochoose%5offreememoryor2%oftotalmemory.推荐值:vm.min_free_kbytes=内存值*2%(上限5G)3.3. VB.zone_reclaiB-aodezoneeclaim_mode模式是在2.6版本后期开始加入内核的种模式,可以用来管理当个内存区域(ZOne)内部的内存耗尽时,是从其内部进行内存回收证是可以从其他zone进行回收的选项.在申请内存时,内核在当前Zone内没有足够内存可用的情况下,会根据zone_reclaim_mode的设置来决策是从下一个zone找空闲内存还是在zone内部进行回收,这个值为O时表示可以从下一个Zone找可用内存,非。表示在本地回收.默认情况卜.,zone,edaim梭式是关闭的.这在很多应用场景卜可以提高效率,比如文件服务SS,或者依赖内存中cache比较多的应用场景.如果确定应用场景是内存需求大于At存,而且尽,要逑免内存访向IHeNUMA节点造成的性IB下降的话,则可以打开ZOnJredaim模式.此时页分配器会优先回收容易回收的可回收内存(主要是当前不用的PageCaChe页),然后再回收其他内存。(如果读写信很大,则应该关闭,命中率较低,因为缓存意义不大.目前mongoDB的官方文档推荐,足关闭NUMA.关闭Vnl.zone_reclaim_mode.)打开本地回收模式的写回可能会引发其他内存节点上的大量的脏数据写回处理,Ir次打开,会引发脏数据写回,该操作时间和应用处商好,建议启服务)»如果一个内存Zone己经满了,那么脏数据的写回也会导致进程处理速度收到影响,产生处理瓶颈。(进程所在CPU可用的内存收少直接导致脏数据写回的频率提商了,写归1产生的影响也就增加了,CaChe写回对CaChe的读写性能一定有短暂的影响)这会降低某个内存节点相关的进程的性能,因为进程不再能第使用其他节点上的内存。但是会增加节点之间的隔离性,其他节点的相关进程运行将不会因为另一个节点上的内存回收导致性能下降.推荐值tvm.zone_redalm_mode=1(在内存分三三不足,且内存需求较多,建议关闭,加速CaChe回收I)3.4. va.dirty-ratio是可以用脏数据地充的绝对此大系统内存地,用占系统空闱内存的百分比来表示,当系统到达此点时,必须将所有脏数据提交到减盘,同时所有新的I/O块都会被阻塞直到新数据被写入磁盘。这通常是长I/O卡顿的原因,但这也是保证内存中不会存在过播航数据的保护机制,表示当写缓冲使用到系统内存多少的时候,开始向磁极写出数据,增大只会使用更多系统内存用于磁盆写缓冲,可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,推荐值:Vmdrtyjatio=30(保持默认)3.5. va.dirty_background_ratio内存肺数据开始写回的上限,JIJ占系统空闲内存的百分比来表示,这些新数据梢后会Ii入减盘,pdflush/flush/kdmflush这些后台进程公稍后清理脏数据。控制文件系统的PdflUSh进程,在何时刷新磁盘,以脏数据是否达到占系统空闲内存的百分比,Pdflush开始将内存中的内容和文件系统进行同步e比如说,当一个文件在内存中进行修改,Pdflush负费将它写回硬盘.都当内存中的垃圾页(dirtypage)超过10%的时候,Pdflush就会将这些页面备份硬盘.增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能.但是,当你需要持续、恒定的写入场合时,应该降低其数值:推荐值:vm.dirty_background_ratio=10情景hOCache你可以针对要做的事情来制定一个合适的值.在一些情况下,我们有快速的磁盘子系统,它们有自带的带备用电池的XVRAMcaches,这时候把数据放在操作系统层面就显得相对高风险了.所以我们希里系统更及时地往磁盆写数拉;。可以在etcsysctl.conf中加入下面两行,并执行"sysctl-p”vm.dirty_background_ratio=5vm.dirty_ralio-10这是虚拟机的典型应用.不建议将它设置成0,毕竟有点后台10可以提升一些程序的性熊.情景2增加CaChe在一些场景中增加CHChe是有好处的.,例如,数据不理要丢了也没关系,而且有程序重史地读写一个文件.允许更多的CaCh0,你可以更多地在内存上进行读写,提高速度。vm.dirtybackgroundratio=50vm.dirty_ralio-80有时候还会提高皿dirtyexpire_centisecs这个参数的值,未允许脏数据更长时间地停留.情景3,增减豪有有时候系统需要应对突如其来的高峰数据,它可能专拖慢磴盘。(比如说,每个小时开始时进行的批量操作等)这个时候能要容许更多的脏数掂存到内存,让后台进程慢慢地通过芹步方式将数据3到程盘当中。Ym.diriy_background_ratio=5vm.dirty_ralio=80这个时候,后台进行在脏数据达到5%时就开始异步清理,但在80%之前系统不会强制同步写磁盘.这样可以使10变得更加平滑.从procVmStat,procmeminfo,procsysvm中可以获得更多资讯来作出调整。

    注意事项

    本文(Linux 虚拟内存参数配置.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开