full gc原因(解决问题的方法有哪些)

#问题描述在工作过程中,遇到一个问题:Tomcat在重启或者发布的时候,会有多次的fullGC。JDK版本是1.8首先排查JVM的问题,就要把GC日志打开-XX:+PrintGC-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:+PrintGCDateStamps-Xloggc:/home/logs/gc.log重启Tomcat…

大家好,又见面了,我是你们的朋友全栈君。

#问题描述
在工作过程中,遇到一个问题:Tomcat在重启或者发布的时候,会有多次的full GC。

JDK版本是1.8

首先排查JVM的问题,就要把GC日志打开

-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:/home/logs/gc.log

重启Tomcat服务器,发现gc日志如下:

full gc原因(解决问题的方法有哪些)

原因描述

通过GC日志可以看到,old区离最大配置还很远,Metaspace区并没有真正释放空间,所以怀疑是Metaspace区不够用了。

以前只认为,Metaspace区是保存在本地内存中,是没有上限的,经查阅资料才发现,原来JDK8中,XX:MaxMetaspaceSize确实是没有上限的,最大容量与机器的内存有关;但是XX:MetaspaceSize是有一个默认值的:21M。问题就出在这里。

最终解决方案

既然问题找到了,那么就设置一个XX:MetaspaceSize的JVM启动参数:-XX:MetaspaceSize=128M.

Metaspace配置说明

从JDK8开始,永久代(PermGen)的概念被废弃掉了,取而代之的是一个称为Metaspace的存储空间。Metaspace使用的是本地内存,而不是堆内存,也就是说在默认情况下Metaspace的大小只与本地内存大小有关。当然你也可以通过以下的几个参数对Metaspace进行控制:

** -XX:MetaspaceSize=N **
这个参数是初始化的Metaspace大小,该值越大触发Metaspace GC的时机就越晚。随着GC的到来,虚拟机会根据实际情况调控Metaspace的大小,可能增加上线也可能降低。在默认情况下,这个值大小根据不同的平台在12M到20M浮动。使用java -XX:+PrintFlagsInitial命令查看本机的初始化参数,-XX:Metaspacesize为21810376B(大约20.8M)。

å¨è¿éæå¥å¾çæè¿°

**-XX:MaxMetaspaceSize=N **
这个参数用于限制Metaspace增长的上限,防止因为某些情况导致Metaspace无限的使用本地内存,影响到其他程序。在本机上该参数的默认值为4294967295B(大约4096MB)。

**-XX:MinMetaspaceFreeRatio=N **
当进行过Metaspace GC之后,会计算当前Metaspace的空闲空间比,如果空闲比小于这个参数,那么虚拟机将增长Metaspace的大小。在本机该参数的默认值为40,也就是40%。设置该参数可以控制Metaspace的增长的速度,太小的值会导致Metaspace增长的缓慢,Metaspace的使用逐渐趋于饱和,可能会影响之后类的加载。而太大的值会导致Metaspace增长的过快,浪费内存。

**-XX:MaxMetasaceFreeRatio=N **
当进行过Metaspace GC之后, 会计算当前Metaspace的空闲空间比,如果空闲比大于这个参数,那么虚拟机会释放Metaspace的部分空间。在本机该参数的默认值为70,也就是70%。

**-XX:MaxMetaspaceExpansion=N **
Metaspace增长时的最大幅度。在本机上该参数的默认值为5452592B(大约为5MB)。

**-XX:MinMetaspaceExpansion=N **
Metaspace增长时的最小幅度。在本机上该参数的默认值为340784B(大约330KB为)。

参考资料
第一次FullGC优化实战
JVM之永久区Permanent区参数设置分析
Metaspace

文章来源:https://blog.csdn.net/liubenlong007/article/details/78143285

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128696.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 进制转换python实验五_python进制转换:十进制转二进制的用法「建议收藏」

    进制转换python实验五_python进制转换:十进制转二进制的用法「建议收藏」我们在学习python时候肯定会碰到关于进制转换,其实这是非常简单的,这个就像小学学习数学乘法口诀意义,只要记住转换口诀即可轻松应用,一起来看下具体的操作内容吧~一、python进制转换dec(十进制)—>bin(二进制)dec(十进制)—>oct(八进制)dec(十进制)—>hex(十六进制)二、十进制我们所熟知的十进制,其实是从0开始,数到9之后,就跳到10,…

    2022年5月19日
    44
  • Struts2 漏洞信息汇总

    Struts2 漏洞信息汇总官方链接如下:https://cwiki.apache.org/confluence/display/WW/Security+Bulletins最近不出以外Struts2又又又一次被爆出RCE漏洞【S2-061Struts远程代码执行漏洞(CVE-2020-17530)】每次Struts2RCE漏洞爆发的时候都在想,如果有个地方能统一看一下Struts2的历史漏洞就好了,网上搜索了下居然没有,翻了下Struts2官网,终于找到了需要的内容截至本文发布时,所以已经爆出的Strut.

    2022年7月19日
    15
  • Android常用控件

    Android常用控件TextView显示文本<TextViewandroid:id="@+id/text_view"android:layout_width="match_pa

    2022年7月2日
    19
  • Elasticsearch面试题精选20题[通俗易懂]

    Elasticsearch面试题精选20题[通俗易懂]题目均来源于网络,为个人学习标注并纠错后发布。目录1.ES为什么那么快(ES的索引原理)?Elasticsearch查询速度为什么这么快?2.MongoDB和Elasticsearch区别3.ES的倒排索引是什么?4.Elasticsearch索引数据多了怎么办,如何调优,部署?5.说你们公司ES的集群架构,索引数据大小,分片有多少,以及一些调优手段。6.Elasticsearch是如何实现master选举的?7.详细描述一下Elasticsearch索引文档的过程。

    2022年9月13日
    0
  • excel差异显著性分析的结果怎么看_excel三组数据的显著性差异

    excel差异显著性分析的结果怎么看_excel三组数据的显著性差异如何利用excel进行数据差异显著性分析利用excel进行数据差异显著性分析的步骤:工具原料:excel2013版本;1.打开excel,添加“数据分析”模块;结果如图;添加“数据分析”模块步骤:①单击左上角“文件”选项;②在弹框中,选择“选项”;③再选择“加载项”,选择”分析工具库“;④点击”转到(G)”,在弹出的”加载宏“,界面里勾选”分析工具库“,点击确定即可;⑤添加“数据分析”模块成功…

    2022年10月26日
    0
  • SCTP详解

    SCTP详解转载自:IBM中文官网sctp部分,代码下载地址:http://www.ibm.com/developerworks/apps/download/index.jsp?contentid=163181&filename=l-sctp-msdemo.zip&method=http&locale=zh_CN作者:M.TimJones是一名嵌入式软件工程师,他是 GNU/LinuxAppl

    2022年6月29日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号