加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

值得阅读的内存泄露分析总结和Tomcat调优

发布时间:2019-03-17 19:31:12 所属栏目:业界 来源:今日头条
导读:写在最前面,运行情形:tomcat8,jdk1.8,windows server 2008内存16G,软件LoadRunner11,MAT和JProfile9.1。 题目描写:前段时刻碰着一个很稀疏的题目,开拓的WEB应用,常常会毫无症状的宕掉,然后抓了线程栈看下,发明之前写的数据库链接池呈现了阻塞的

直接内存区并不是 JVM 打点的内存地区的一部门,而是其之外的。该地区也会在 Java 开拓中行使到,而且存在导致内存溢出的隐患。假如你对 NIO 有所相识,也许会知道 NIO 是可以行使 Native Methods 来行使直接内存区的。

Part2.Heap(堆)和CMS垃圾接纳算法

下面我们要具体说明一下Heap,Heap(堆)又可以细分成三部门,Old Gen(晚年堆),Eden Space(年青堆也叫伊甸园),Survivor Space(S0+S1)。我们可以通过设置参数节制Heap的巨细,详细配置在后头调优会讲。当措施运行时,大大都环境new的一些工具,最开始城市存放Par Eden Space,然后多次接纳(Young GC)之后如故存活的工具就会挪到CMS Old Gen(晚年堆)。必要留意的是除此之外,大的数组工具且工具中无外部引用的工具,和通过启动参数配置的-XX:PretenureSizeThreshold=1024(字节),高出这个巨细的工具城市直接分派到CMS Old Gen(晚年堆)。下面我们要讲的垃圾接纳算法就是产生在这个处所。在我们应用情形中,因为我们设置了CMS GC(并发GC)的接纳要领,以是对Eden Space行使的GC算法默认就是ParNew(并行GC)。这里供Par Eden Space和Old Gen选择的GC算法有许多种,可以按照本身的情形选择,一样平常多核CPU城市选择CMS(并发GC),这样更高效。

CMS执行进程可以分成:初始标志,并发标志,并发预处理赏罚,重标志,并发整理,重置六个阶段,这里必要留意的是初始标志和重标志两个阶段是必要Stop-the-world,其他阶段都是和措施其他历程并发执行的,System.gc()挪用的Full GC的整个进程都是Stop-the-world,这也是为什么说CMS是对体系影响最小的垃圾接纳要领。

初始标志:该阶段举办可达性说明,标志GC ROOT可以直接关联的工具。留意这里是直接关联,间接关联的将在第二阶段举办标志。那么什么可以作为GC ROOT呢,一样平常是:①假造机栈中的引用工具。②要领区中类静态属性引用的工具③要领区中常量引用工具④当处所法栈中JNI引用工具。

并发标志阶段:该阶段举办GC ROOT

Tracing(各人可以把这个想象成由一个Root组成的树,树上除了Root节点,存在引用相关的其他节点到Root都有可达路径。),在第一阶段被停息的线程所有规复执行,然后从上一阶段mark的工具出发,对全部可达的工具举办标志。

并发预处理赏罚:这一步就是CMS算法的精华地址,由于CMS是以获取最短的停即刻间为目标的GC算法。在mark和remark两个阶段都必要Stop-the-world,以是并发预处理赏罚的目标就是提前做一些remark做的工作,减短remark阶段的耗时。这一阶段,将标志从Eden Space提拔的工具、从Eden Space分派到Old Gen的工具,以及在并发标志阶段被修改的工具。怎么确定一个工具是否存活,即通过追踪GC ROOT Tracing有可达路径的工具就是在世的。举个例子吧,就好比说一个在Old Gen中存在工具B,在并发标志阶段没被标志成alive,眼看就要小命不保了,就在这个时辰措施历程又New了一个工具A,此时A工具又引用了Old Gen中的B工具(由于并发标志阶段并不是Stop-the-world,以是措施历程和标志历程是并发执行的)。那么这个工具B就不该该被接纳掉,由于被A捞了一把,手牵手进入了GC ROOT Trace。这个B在并发预处理赏罚阶段就会被标志成alive。

重标志:这个阶段也是要Stop-the-world的,从头扫描堆中的工具,再次举办可达性说明,标志alive的工具。

并发整理:从头激活用户线程,然后整理哪些dead Objects(不存在引用的工具)。

重置:CMS清晰内部状态,筹备下一次接纳。

为了更好地声名CMS接纳的进程,这里贴一段现实场景中的GC日记:

  1. -----------------------------------------初始标志(Stop-the-world)--------------------------------------------- 
  2.  
  3. 135140.215: [GC (CMS Initial Mark) [1CMS-initial-mark: 195002K(3375104K)]207465K(3989504K), 0.0053961 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
  4.  
  5. -----------------------------------------并发标志--------------------------------------------- 
  6.  
  7. 135140.221: [CMS-concurrent-mark-start]135140.287: [CMS-concurrent-mark:0.066/0.066 secs] [Times: user=0.50 sys=0.00, real=0.07 secs] 
  8.  
  9. -----------------------------------------并发预处理赏罚--------------------------------------------- 
  10.  
  11. 135140.287: [CMS-concurrent-preclean-start]135140.295: [CMS-concurrent-preclean:0.009/0.009 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] 
  12.  
  13. -----------------------------------------重标志(Stop-the-world)--------------------------------------------- 
  14.  
  15. 135140.298: [GC (CMS Final Remark) [YG occupancy: 13058 K (614400 K)]//这里最前面的135140.298是JVM运行时刻,单元是S。YG就是Young Gen(Eden Space),前面的数字是占用巨细,括号里是总巨细 
  16.  
  17. 135140.298: [Rescan (parallel) , 0.0071866 
  18.  
  19. secs]//这里要对Young Gen从头扫描 
  20.  
  21. 135140.305: [weak refs processing,0.1143667 secs]135140.420: [class unloading, 0.1829570secs]135140.603: [scrub symbol table, 0.0194112secs]135140.622: [scrub string table, 0.0019222secs][1 CMS-remark: 195002K(3375104K)] 208060K(3989504K), 0.4727087 secs][Times: user=0.47 sys=0.00, real=0.47 secs] //这里195002K(3375104K)暗示的是Old Gen的行使环境,208060K(3989504K)是整个Heap的行使环境 
  22.  
  23. -----------------------------------------并发整理--------------------------------------------- 
  24.  
  25. 135140.771: [CMS-concurrent-sweep-start]135140.845: [CMS-concurrent-sweep:0.073/0.073 secs] [Times: user=0.09 sys=0.03, real=0.07 secs] 
  26.  
  27. -----------------------------------------重置--------------------------------------------- 
  28.  
  29. 135140.850: [CMS-concurrent-reset-start]135140.856: [CMS-concurrent-reset:0.006/0.006 secs] [Times: user=0.01 sys=0.02, real=0.01 secs] 。 

关于CMS算法的优弱点,尚有详细实现的的一些细节,这里就不做过多论述了,有乐趣的可以自行查阅资料。

Part3.MAT说明器材和Jprofile说明器材

一顿操纵猛如虎,根基相识了JVM的内存的构成和垃圾接纳相干的基本信息。然后就要来说明一下WEB应用到底题目出在哪了。工欲善其事,必先利其器,然后我就下载了MAT和Jprofile。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读