我们的Java应用因频繁FULL GC导致性能降低很多,经过多人的定位也没有结论,于是我自主请命,经过一天的研究终于搞定了,现把经验与大家共享,相关的gc日志如下:
4.758: [Full GC [PSYoungGen: 464K->0K(71936K)] [PSOldGen: 37949K->33994K(68672K)] 38413K->33994K(140608K) [PSPermGen: 33221K->33221K(66560K)], 0.1887540 secs] [Times: user=0.20 sys=0.00, real=0.19 secs]
32.324: [Full GC [PSYoungGen: 12025K->0K(176320K)] [PSOldGen: 57570K->65642K(128256K)] 69595K->65642K(304576K) [PSPermGen: 35548K->35548K(76544K)], 0.2467320 secs] [Times: user=0.22 sys=0.02, real=0.25 secs]
50.133: [Full GC [PSYoungGen: 20999K->0K(437248K)] [PSOldGen: 118647K->114524K(198528K)] 139647K->114524K(635776K) [PSPermGen: 49637K->49637K(84224K)], 0.3302180 secs] [Times: user=0.32 sys=0.00, real=0.33 secs]
149.586: [Full GC [PSYoungGen: 44223K->0K(411712K)] [PSOldGen: 190278K->185382K(296064K)] 234501K->185382K(707776K) [PSPermGen: 50674K->50208K(85248K)], 0.6151800 secs] [Times: user=0.62 sys=0.00, real=0.61 secs]
260446.223: [Full GC [PSYoungGen: 31393K->0K(436032K)] [PSOldGen: 1006486K->396428K(1021312K)] 1037880K->396428K(1457344K) [PSPermGen: 61093K->61093K(61440K)], 1.3636610 secs] [Times: user=1.36 sys=0.00, real=1.52 secs]
260630.161: [Full GC (System) [PSYoungGen: 40410K->0K(424768K)] [PSOldGen: 991397K->721859K(1021312K)] 1031808K->721859K(1446080K) [PSPermGen: 61100K->61100K(61440K)], 2.1272130 secs] [Times: user=2.14 sys=0.00, real=2.13 secs]
260720.146: [Full GC (System) [PSYoungGen: 4949K->0K(439360K)] [PSOldGen: 1004066K->833610K(1021312K)] 1009015K->833610K(1460672K) [PSPermGen: 61108K->61108K(61440K)], 2.8408660 secs] [Times: user=2.72 sys=0.10, real=2.84 secs]
260810.150: [Full GC (System) [PSYoungGen: 33459K->0K(463552K)] [PSOldGen: 949989K->245655K(1021312K)] 983448K->245655K(1484864K) [PSPermGen: 61117K->61088K(61184K)], 1.1344010 secs] [Times: user=1.12 sys=0.02, real=1.14 secs]
03430.144: [Full GC (System) [PSYoungGen: 7390K->0K(489024K)] [PSOldGen: 871871K->393481K(976704K)] 879262K->393481K(1465728K) [PSPermGen: 64306K->64295K(64640K)], 1.3848850 secs] [Times: user=1.34 sys=0.06, real=1.38 secs]
403794.982: [Full GC [PSYoungGen: 9352K->0K(454144K)] [PSOldGen: 963758K->426051K(991744K)] 973110K->426051K(1445888K) [PSPermGen: 64298K->64298K(64640K)], 1.3783510 secs] [Times: user=1.32 sys=0.06, real=1.38 secs]
404120.149: [Full GC (System) [PSYoungGen: 6846K->0K(467648K)] [PSOldGen: 943642K->440168K(991744K)] 950489K->440168K(1459392K) [PSPermGen: 64300K->64300K(64640K)], 1.1605070 secs] [Times: user=1.12 sys=0.04, real=1.16 secs]
404466.698: [Full GC [PSYoungGen: 9719K->0K(472768K)] [PSOldGen: 980355K->442899K(1021312K)] 990074K->442899K(1494080K) [PSPermGen: 64303K->64303K(64640K)], 1.1729280 secs] [Times: user=1.14 sys=0.04, real=1.18 secs]
经过日志分析,我找到两个突破点,重点关注红色字体部分的日志,分析过程如下:
1)FULL GC前后Java堆大小有变化;经研究发现是由于Java应用JVM参数XMS设置为默认值,在我们的系统环境下,Hotspot的Xms默认值为50M(-Xms默认是物理内存的1/64);每次GC时,JVM会根据各种条件调节Java堆的大小,Java堆的取值范围为[Xms, Xmx]。根据以上分析,修改Xms值与Xmx相等,这样就不会因为所使用的Java堆不够用而进行调节,经过测试后发现FULL GC次数从四位数减少至个位数。
2)关键词“System”让我想到了System.gc调用,System.gc调用只是建议JVM执行年老代GC,而年老代GC触发FULL GC,JVM会根据系统条件决定是否执行FULL GC,正因为系统条件不好判断,所以很难构造System.gc调用触发FULL GC,几经周折终于成功,当System.gc触发FULL GC时都会有关键词“(System)”,而 JVM自动触发的FULL GC却不带关键词“(System)”,可以断定是Java应用存在“System.gc”代码。经过本次测试我也发现System.gc的真正含义,通俗言之,“System.gc” 就是FULL GC触发的最后一根稻草。
从本次分析中,我们可以得出如下的经验:
1)Java应用的jvm参数Xms与Xmx保持一致,避免因所使用的Java堆内存不够导致频繁full gc以及full gc中因动态调节Java堆大小而耗费延长其周期。
2)建议不要调用System.gc或者Runtime.getRuntime().gc,否则本次调用可能会成为“压死骆驼的最后一根稻草”。当然我们可以通过设置jvm参数禁止这种调用生效,但是除非特别有把握该参数有必要添加,否则不推荐这么设置。
https://my.oschina.net/goldwave/blog/168515
相关推荐
那难以忘怀的一幕,让我深刻体会到了人性中最柔软的一部分。它告诉我,生活不仅有欢笑与幸福,更有艰辛与痛苦。而我们每个人都应该学会同情,学会关爱那些在困境中挣扎的人。我们的每一个善举,都可能成为他人生命中...
【标题】和【描述】提及的是一个文档集合,标题为"难以忘怀的一件事作文(26篇).docx",描述简单地重复了标题,表明这是一个包含26篇以"难以忘怀的一件事"为主题的作文文档。文档的标签为"技术",但这与文档内容...
在我的人生旅途中,有过许多次令我难以忘怀的经历,但其中最让我感到特殊和深刻的是我的第一次异性SPA经历和我的第一次实习。这两段经历,让我在身心上都得到了洗礼,让我更深刻地理解了坚持和努力的重要性,也让我...
这篇中考满分作文以“那一幕,我难以忘怀”为主题,展现了作者对于生命无常的深刻感悟和对亲人离世的悲痛记忆。文章通过叙述舅舅因病去世的故事,揭示了生活中的突然变故和亲情的珍贵。 文章开头点出人生如剧场,...
在这寒冷的冬日,一个星期六的早晨,我们学校组织了一次别开生面的社区清洁活动。这是我们第一次集体参与劳动,作为即将踏向社会的青年学生,这次劳动不仅仅是对我们体力的锻炼,更是对我们意志和品格的考验。在寒冷...
每个人的成长过程中都有那么一两件令人心跳加速、难以忘怀的事情,这些事件往往成为塑造我们性格和心理的重要里程碑。对于钱步容来说,那个冬天的大年初三,她与哥哥姐姐弟弟妹妹一起在乡间捕捉蛇的经历,无疑是她...
对于我来说,这不仅仅是我的第一次独立购物,也是一次成长的体验,它让我学会了独立,学会了责任,更学会了生活。 回顾这次购物经历,我意识到,生活中的每一个瞬间都值得我们去记录和思考。通过写作,我不仅锻炼了...
对我而言,“第一次升旗”便是这样一个难以忘怀的经历。那一次,我有幸成为了一名升旗手,一个在庄严的升旗仪式中承担重要角色的学生。 升旗仪式,在我国每个学校里都是一个庄严而神圣的时刻。每当朝阳初升,伴随着...
尽管这个结局让人感到遗憾,但正是这种无奈与真实,给读者留下了深刻的印象,使之难以忘怀。 网络文学中常见的完美结局往往只能带来短暂的愉悦,而凄美的结局却能深深打动人心,并长久地留在人们记忆中。《第一次...
综合来看,人教课标五年级语文下册的第七组习作“把人物写活”实质上是一次全方位的写作技能训练。通过这个习作,学生将学习如何运用各种写作技巧,如细致的描写、生动的事例叙述等,来创作出形象鲜明、性格丰满的...
在人生的长河中,每个人都会遇到各种各样的人,这些人或许会因为某些特殊的事迹或品质而让我们难以忘怀。对于小学生而言,他们在成长的过程中也会遇到许多这样的人,这些人和事成为他们记忆中宝贵的财富,甚至在他们...
她的形象在我心中树立起了一个学习的榜样,让我也渴望成为一个对社会有贡献的人。 再谈到周佳昕,她的故事同样令人动容。在这个快节奏的社会里,宽容和温柔似乎越来越难以寻觅。周佳昕却以她的和善、宽容和温柔温暖...
在浩荡的高校新生入学季,每年都会迎来一批朝气蓬勃的学子,他们带着好奇与憧憬踏入校园,而在这过程中,最为引人注目与充满挑战的,便是军训这一独特的序章。对于每一个刚迈进大学门槛的新生命而言,军训不仅仅是一...
什么是难以忘怀的?作文.doc
军旅生活,对于许多人而言,是成长道路上的一次重要转折点,它能教会我们如何面对挑战,如何在团队中找到自己的位置。 在接下来的日子里,你将会体验到生活节奏的改变,你需要遵守严格的纪律,与来自不同背景的人...
一个好的赠言能够唤起人的信心,让人珍惜当下,同时使人对过去美好的回忆难以忘怀。在小学生活的最后一个阶段,互赠赠言不仅是一次语言表达的练习,更是一次情感体验的实践。它帮助孩子们学会以积极的心态面对未来的...
雪夜的静美,是那么的令人向往,那么的让人难以忘怀。 而对于作者,这场雪不仅仅是一场自然现象,它是一段记忆,一种情感。雪所带来的不仅仅是寒冷,更是对一个特定时刻和经历的珍贵回忆。它如同一场梦,让人在多年...
2. **细节描写**:作者通过描绘小鸡的眼睛、生病时的状态以及自己照顾它的过程,展现了生动的细节,让读者能感受到故事的真实性。在写作中,细节描写能增强故事的吸引力和说服力。 3. **情节发展**:文章以大年初一...
1. **主题明确**:作文的主题是“难忘的第一次”,要求学生回忆并描述他们生活中的某个首次经历,且这个经历应具有特殊意义,令人难以忘怀。学生需要把握“难忘”和“第一次”这两个关键词,确保作文内容符合主题。 ...
而同时,登山也是一种亲近自然的方式,它让人在攀登的过程中放松心情,释放压力。作者提到,通过登山,他学会了如何在自然中找到自我,如何在挑战中超越自我。 综合这三篇作文,我们可以看到登山不仅仅是一种身体上...