当前位置: 首页 > news >正文

六师五家渠市建设局网站做流程图表的网站

六师五家渠市建设局网站,做流程图表的网站,个人网站备案技巧,国际新闻最新消息战争Java NIO为何导致堆外内存OOM了#xff1f; 描述 某天报警#xff1a;某台机器部署的一个服务突然无法访问。谨记第一反应登录机器查看日志#xff0c;因为服务挂掉#xff0c;很可能因OOM。这个时候在机器的日志中发现了如下的一些信息#xff1a; nio handle failed j…Java NIO为何导致堆外内存OOM了 描述 某天报警某台机器部署的一个服务突然无法访问。谨记第一反应登录机器查看日志因为服务挂掉很可能因OOM。这个时候在机器的日志中发现了如下的一些信息 nio handle failed java.lang.OutOfMemoryError: Direct buffer memory at org.eclipse.jetty.io.nio.xxxx at org.eclipse.jetty.io.nio.xxxx at org.eclipse.jetty.io.nio.xxxx表明确实为OOM问题是哪个区导致的呢可以看到是Direct buffer memory还看到一大堆jetty相关方法调用栈仅凭这些日志就能分析OOM原因。 Direct buffer memory 堆外内存JVM堆内存之外的一块内存不是由JVM管理但Java代码却能在JVM堆外使用一些内存空间。这些空间就是Direct buffer memory即直接内存这块内存由os直接管理。但称其为直接内存有些奇怪我没更爱称其为“堆外内存”。 Jetty作为JVM进程运行我们写好的系统的流程 这次OOM是Jetty在使用堆外内存时导致。可推算得Jetty可能在不停使用堆外内存然后堆外内存空间不足没法使用更多堆外内存就OOM了。 Jetty不停使用堆外内存 解决OOM的底层技术 Jetty既然是用Java写的那他是如何通过Java代码申请堆外内存的然后这个堆外内存空间又如何释放呢这涉及Java的NIO底层。JVM的性能优化相对还是较为容易一些的但若是解决OOM除了一些弱智和简单的如有人在代码里不停创建对象。其他很多生产的OOM问题都有点技术难度需要扎实技术。 堆外内存是如何申请的又是如何释放的 如在Java代码里要申请使用一块堆外内存空间是使用DirectByteBuffer这个类你可以通过这个类构建一个DirectByteBuffer的对象这个对象本身是在JVM堆内存里的。 但是你在构建这个对象的同时就会在堆外内存中划出来一块内存空间跟这个对象关联起来我们看看下面的图你就对他们俩的关系很清楚了。 因此在分配堆外内存时基本就这思路。 如何释放堆外内存 当你的DirectByteBuffer对象无人引用成垃圾后就会在某次YGC或Full GC时被回收。只要回收一个DirectByteBuffer对象就会释放其关联的堆外内存 那为何还出现堆外内存溢出 若你创建很多DirectByteBuffer对象占了大量堆外内存然后这些DirectByteBuffer对象还无GC线程来回收那就不会释放呀当堆外内存都被大量DirectByteBuffer对象关联使用若你再要使用额外堆外内存就报内存溢出何时会出现大量DirectByteBuffer对象一直存活导致大量堆外内存无法释放还可能是系统高并发创建过多DirectByteBuffer占用大量堆外内存此时再继续想要使用堆外内存就会OOM但该系统显然不是这种情况。 真正的堆外内存溢出原因 可以用jstat观察线上系统运行情况同时根据日志看看一些请求的处理耗时分析过往gc日志还看了一下系统各个接口的调用耗时后分析思路如下。 首先看接口调用耗时系统并发量不高但他每个请求处理较耗时平均每个请求需1s。 然后jstat发现随系统不停被调用会一直创建各种对象包括Jetty本身不停创建DirectByteBuffer对象去申请堆外内存空间接着直到Eden满就会触发YGC 但往往在进行GC的一瞬间可能有的请求还没处理完此时就有不少DirectByteBuffer对象处于存活状态还没被回收当然之前不少DirectByteBuffer对象对应的请求可能处理完毕了他们就可以被回收了。 此时肯定会有一些DirectByteBuffer对象以及一些其他的对象是处于存活状态的就需转入Survivor区。记得该系统上线时内存分配极不合理就给了年轻代一两百M老年代却给七八百M导致年轻代中的Survivor只有10M。因此往往在YGC后一些存活下的对象包括了一些DirectByteBuffer会超过10M没法放入Survivor直接进入Old 于是反复的执行这样的过程导致一些DirectByteBuffer对象慢慢进入OldOld的DirectByteBuffer 对象越来越多而且这些DirectByteBuffer都关联很多堆外内存 这些老年代里的DirectByteBuffer其实很多都是可以回收的状态了但是因为老年代一直没塞满所以没触发full gc也就自然不会回收老年代里的这些DirectByteBuffer了当然老年代里这些没有被回收的DirectByteBuffer就一直关联占据了大量的堆外内存空间了 直到最后当你要继续使用堆外内存时所有堆外内存都被老年代里大量的DirectByteBuffer给占用了虽然他们可以被回收但是无奈因为始终没有触发老年代的full gc所以堆外内存也始终无法被回收掉。最后导致OOM 这Java NIO怎么看起来这么沙雕 Java NIO没考虑过会发生这种事吗 考虑了他知道可能很多DirectByteBuffer对象也许没人用了但因未触发gc就导致他们一直占据堆外内存。Java NIO做了如下处理每次分配新的堆外内存时都调用System.gc()提醒JVM主动执行以下GC去回收掉一些垃圾没人引用的DirectByteBuffer对象释放堆外内存空间。 只要能触发GC去回收掉一些没人引用的DirectByteBuffer就会释放一些堆外内存自然就可以分配更多对象到堆外内存。但因为我们又在JVM设置了 -XX:DisableExplicitGC导致这System.gc()不生效因此导致OOM。 终极优化 项目有如下问题内存设置不合理导致DirectByteBuffer对象一直慢慢进入老年代堆外内存一直无法释放设置了-XX:DisableExplicitGC导致Java NIO无法主动提醒去回收掉一些垃圾DIrectByteBuffer对象也导致了无法释放堆外内存对此就该合理分配内存给年轻代更多内存让Survivor区域有更大的空间放开-XX:DisableExplicitGC这个限制让System.gc()生效优化后DirectByteBuffer一般就不会不断进入老年代了。只要他停留在年轻代随着young gc就会正常回收释放堆外内存了。只要放开-XX:DisableExplicitGC限制Java NIO发现堆外内存不足了自然会通过System.gc()提醒JVM去主动垃圾回收回收掉一些DirectByteBuffer进而释放堆外内存。 ----------------------------------------------------------------------------------- offer突击训练营简介 1针对不知道怎么面试面试没有信心的小伙伴我们会给你一个offer保障。 2我们会监督你15-20天内把面试体系技术点掌握至少7成这样足够你去找到满意的工作了。 3我们是面向面试学习指导不会带你们去写代码会把项目真实开发的迭代过程和技术细节如何实现业务功能都详细教清楚你能在面试中流畅表达清楚就行了项目经验你不用担心(技术老师提供的真实项目经验肯定拿的出手)自己学和别人带着系统学效率完全不一样。 详情请点击这里offer突击训练营给你一个offer的保障求职跳槽的看过来
http://www.yutouwan.com/news/352863/

相关文章:

  • 网站建设中两个月了网上注册公司流程和费用营业执照
  • 公司开通网站无锡专业做网站的
  • 移动网站 html5可以免费发外链的论坛
  • 郑州微网站织梦手机网站模板删除不了
  • dns 本地 网站建设电子商务策划书模板
  • 企业网站建设及前期准备石家庄网站运营
  • 电商网站开发的底层架构微信公众号文章编辑wordpress
  • 昆明网站建设一条龙甘肃省住房与城乡建设厅网站首页
  • 网站好坏标准免费装修设计app
  • 辽宁品质网站建设价格实惠黄骅贴吧二手房买卖
  • soso搜搜网站收录提交入口加盟网站建设公司
  • 张掖北京网站建设横向网站源码
  • 网站数据怎么会丢失建设单位经常去哪个网站
  • 怒江北京网站建设模板网站建设价位
  • 静态中英文网站怎么做兼职网站编辑
  • 培训网站建设公司如何在百度上搜到网站
  • 参考文献网站开发wordpress改密码
  • 优秀国外网站设计赏析宁波网站推广建站
  • 网站备案方案制作公司网页可以用网上图片吗
  • 网站建设 公司 天津如何用ad做网站
  • 浙江嘉兴网站建设网页特效大全
  • jq做6个网站做什么好wordpress网站速度优化
  • 网站二维码怎么做的在网上做广告怎么做
  • 医保局网站建设网站建设分金手指排名十八
  • 银川网站建设有哪些网站开发答辩演讲
  • 商业网点建设开发中心网站西双版纳网站建设公司
  • 郑州网站建设模板制作网上商城推广方案
  • 网站降权投诉哪儿能做网站建设
  • 青岛商城网站建设设计怎么做app推广代理
  • 网站知识邢台提供网站设计公司哪家专业