我们的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参数禁止这种调用生效,但是除非特别有把握该参数有必要添加,否则不推荐这么设置。
分享到:
相关推荐
这篇PPT的学习教案主要针对的是小学六年级下册的一次作文教学,主题是“难忘的第一次”。这个教学活动旨在引导学生们回忆并记录他们生活中的重要瞬间,尤其是那些第一次的经历,以此来锻炼他们的写作技巧和表达情感...
[难忘的一次抢救]难忘的一次活动400.rar
本次教学活动的目标是让六年级的学生通过写作,回忆和记录下那些“难忘的第一次”,并在书写的过程中深入理解个人成长的含义。 “难忘的第一次”这一主题非常贴近学生的生活实际,每个人的成长历程中都伴随着各种...
【标题】:“难忘的第一次作文指导.doc” 【描述】:“难忘的第一次作文指导.doc” 【标签】:“文档” 本文档提供了关于如何撰写以“难忘的第一次”为主题的作文的指导,帮助学生选择合适的题材并提供写作要点。...
- 运动员在比赛中往往会遇到巨大的心理压力,如何调整心态,克服紧张情绪,保持冷静和专注成为一项重要的能力。 ### 科学实验 1. **滑翔机模型**: - 滑翔机模型的制作涉及到空气动力学原理,通过调整翼型、翼展...
这些“第一次”可能是第一次一个人走夜路,可能是第一次站在众人面前表演,也可能是第一次作为班干部参与管理……这些体验虽然千差万别,但它们都有一个共同的特点——那就是令人难忘。本篇PPT教案旨在通过引导学生...
在成长的道路上,每个人都会遇到无数个“第一次”,这些初次体验往往给人们留下深刻的印象,并成为成长过程中的重要里程碑。对于小学生而言,这些“第一次”更是充满了新鲜感和探索的勇气,它们不仅丰富了孩子们的...
对于我来说,第一次学习游泳的经历就是这样一个难忘的瞬间,它不仅教会了我游泳,更让我学会了如何面对挑战和克服恐惧。 那是一个炎热的夏天,太阳像火球一样炙烤着大地。父亲提议全家去游泳馆避暑,我却感到一阵...
对于一名学生而言,一次因为想要获得一辆自行车而欺骗父母的经历,不仅给他带来了深刻的教训,更成为了一篇令人难忘的作文范文。 故事的主人公,一个平日成绩尚可的孩子,因为一次不理想的考试成绩,而无法满足自己...
一次难忘的选择600字一次难忘的选择600字作文范例.pdf
【部分内容】中的四篇文章实际上都是描述作者生活中的“难忘的第一次”经历,而非直接的技术知识。尽管如此,我们可以将这些故事与技术学习和成长过程中的第一次尝试相联系,从而创建一个关于技术学习经验的话题。 ...
这篇六年级下册《难忘的第一次》习作课课件主要涵盖了如何引导学生进行有效的写作训练,特别是关于个人成长中的特殊经历。以下是一些关键的知识点: 1. **写作技巧**: - **修辞方法的应用**:如使用拟人等修辞...
【标题】与【描述】提及的是一个关于难忘的第一次中考作文的文档,而【标签】为"技术",这似乎存在一定的不匹配。不过,我们可以从文档内容中找到与技术相关的知识点,即在写作过程中使用的技术,如信息组织、表达...
从给定的信息来看,本文主要围绕“难忘的第一次”这一主题展开叙述,通过两段具体的经历,即做饭和喝咖啡,向读者展示了作者在面对新挑战时的成长与体会。接下来,我们将从技术角度出发,结合文章内容,提炼并扩展...
在我的人生旅途中,有过许多次令我难以忘怀的经历,但其中最让我感到特殊和深刻的是我的第一次异性SPA经历和我的第一次实习。这两段经历,让我在身心上都得到了洗礼,让我更深刻地理解了坚持和努力的重要性,也让我...
根据给定的信息,这里主要涉及的是“难忘的第一次”的主题,但由于题目要求从技术角度进行分析,我们将尝试从写作技巧和技术应用的角度来解读这些作文片段。 ### 技术视角下的“难忘的第一次” #### 一、标题与...
学生会被要求找出文中的关键句子,如“第一次的感觉真奇妙,新鲜而刺激,使人回味无穷”,这揭示了“第一次”带来的独特体验和难忘记忆。同时,通过“第一次愈多,生命愈多姿多彩,愿你珍重第一次”的引申,强调积累...
从幼年的细小心灵,到青少年的勇敢尝试,再到成年后的自我探索,每个人的生活中都充满了难忘的第一次。这些经历,像是一串串闪亮的珍珠,串联起我们成长的轨迹,让我们在回忆中品味酸甜苦辣,感受生命的丰富多彩。在...
学生将在课堂上分享自己“难忘的第一次”经历,通过这一过程,他们不仅学会如何清晰、有条理地表达个人情感和体验,更是在倾听他人分享时学会尊重和理解他人的观点和感受。教师将鼓励学生大胆发言,勇于提出自己的...
在人生的长河中,每个人都会遇到各种各样的人,这些人或许会因为某些特殊的事迹或品质而让我们难以忘怀。对于小学生而言,他们在成长的过程中也会遇到许多这样的人,这些人和事成为他们记忆中宝贵的财富,甚至在他们...