idea分析jvm full gc

我们先来看一下gc log,看看是什么原因导致了频繁的full gc:从gc log可以看出,这个full gc的原因是它达到了metaspace的- 。先解释一下MetadataGCThreshold和Lastditchcollection:看到这里你可能会有疑问,你的gc log为什么会打印gc 。

1、JVM基础和内存区域剖析概念特点FIFO虚拟机栈:内存模型栈框架供用户描述Java方法执行:虚拟机栈中的栈元素(支持虚拟机调用和执行方法的数据结构)包括局部变量表、操作数栈、动态链接和方法出口 。1.主存储:2 。数据太多会导致OutOfMemoryError 。JDK1.8和永久一代的区别:1 。存储位置不同,永久生成是物理上的 。2.用不同的存储内容,将元空间存储类、静态变量和常量池的元信息合并到堆中;3.相当于永久生成的数据被分为堆和元空间中的直接内存:为了避免在本机空间和java堆之间来回复制,虚拟机在启动时创建,并用于存储对象实例 。几乎所有的对象(包括常量池)都在堆上分配内存,当对象无法在这个空间申请内存时 , 就会抛出OutOfMemoryError异常 。

2、JVM-GC日志查看 分析首先我们知道以下关于输出GC日志的参数:①GC日志开头负责的服务最近接收4xx告警略频繁;1.我们检查了业务日志,但没有发现相关的错误日志;2.我们检查了nginxaccesslog,发现返回的状态代码都是499 。检查request_uri后,我们发现它并没有聚焦在某个请求上,说明应该不是接口问题,可能是流程层面的问题 。通过对upstream_addr的分类,可以看到问题基本都集中在某一台机器上 。3.根据网上的资料 , 499是nginx扩展的4xx错误 , 表示客户端请求未返回时客户端主动断开连接 。

然后先往这个方向查,登录机器查实际access.log发现upstreamresponse大于10s 。这证明上游服务器已经10秒没有响应了,所以nginx提前关闭链接,返回4994 。为什么进程响应如此缓慢?10秒是不正常的 。考虑到那段时间只有一台机器出了问题,而且是进程级的问题,首先想到的就是GC , 于是再次登录机器查看gclog 。
【idea分析jvm full gc】
3、如何优化生产环境的FullGC?大多数工程师开发完一个系统后,往往会使用默认的JVM参数,而不是在部署生产环境时设置参数 。这绝对是系统负载逐渐增加时最大的问题 。比如你没有设置Xmx、Xms之类的堆内存大小,那么你在启动一个系统的时候可能会默认给你一个几百MB的堆内存大?。?无论是新生代还是旧时代都可能是几百m 。很多后台系统都是用默认的JVM参数部署和启动的 , 前期没有问题,但是到了中后期,有了一定的用户量和一定的负载 , 就会有惊喜 。

4、既然JVM有FullGC,为什么还会出现OutOfMemoryError在Java虚拟机规范中,JVM内存分为程序计数器、Java虚拟机堆栈、本地方法堆栈、Java堆、方法区、运行时常量池(包含在方法区内)和直接内存(直接内存不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区,但这部分内存也是经常使用的 。并且还可能导致OutOfMemoryError异常 。)除了程序计数器,可能会出现OutOfMemoryError异常 。

5、记一次诡异的频繁FullGC报警 , 系统异常飙升到3000。经过调查,原来是rpc接口超时,但是服务提供商反馈系统1 ms返回,为什么在消费端需要13000 ms,网络异常情况下不可能需要这么长时间?太不科学了~一看机器监控,什么 , 机器一直是满的gc 。立即到机器上查看情况:用户线程已经全线挂起,gc thread cpu使用率居高不下,rpc线程池被阻塞 。

我们先来看一下gc log , 看看是什么原因导致了频繁的full gc:从gc log可以看出,这个full gc的原因是它达到了metaspace的- 。先解释一下MetadataGCThreshold和Lastditchcollection:看到这里你可能会有疑问 。你的gc log为什么会打印gc?其实从jdk8开始,gc log默认会打印gccause 。如果是jdk8之前的版本,可以通过JVM参数XX: printgcause打印gccause 。
6、怎样在ide中进行 jvm源码的调试按照方式配置Mingw32,安装到c:\mingw解压Insight到c:\insightmakeclean ,删除所有obj,重置编译环境 makeSYMBOLS1,编译mame 。不要忘记启动C:\insight\bin\insight.exe菜单的符号编译选项“SYMBOLS1” 。

    推荐阅读