GC日志浅析
//java 开发环境,使用HotSpot的虚拟机,64位,windows 开发环境
Java HotSpot(TM) 64-Bit Server VM (25.151-b12) for windows-amd64 JRE (1.8.0_151-b12), built on Sep 5 2017 19:33:46 by "java_re" with MS VC++ 10.0 (VS2010)
//初始内存:4k/页,物理内存(8g--本机内存,2g空闲),交换区(9.4g,1.7g空闲)
Memory: 4k page, physical 8270992k(2282388k free), swap 9889848k(1844640k free)
//启动参数:初始化对内存126m(物理内存1/64),最大堆内存2g(物理内存1/4),打印gc日志,打印gc原因,打印gc日期戳
CommandLine flags: -XX:InitialHeapSize=132335872 -XX:MaxHeapSize=2117373952 -XX:+PrintGC -XX:+PrintGCCause -XX:+PrintGCDateStamps -
//打印gc详情 打印gc时间戳,压缩类对象实例,压缩类指针,使用大页内存
XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -
//使用Parallel 垃圾回收器
XX:+UseParallelGC
//时间 ,gc(内存分配失败)(使用Parallel Scavenge)新生代 ,内存大小从33280K变成了5107K,新生代内存大小38400K。老年代从33280K变成了5186K,新生代使用时间0.0087103 秒,一共使用时间0.01秒
2021-02-18T11:58:31.364+0800: 2.712: [GC (Allocation Failure) [PSYoungGen: 33280K->5107K(38400K)] 33280K->5186K(125952K), 0.0087103 secs] [Times: user=0.01 sys=0.01, real=0.01 secs]
2021-02-18T11:58:32.266+0800: 3.613: [GC (Allocation Failure) [PSYoungGen: 38387K->5119K(38400K)] 38466K->6115K(125952K), 0.0090626 secs] [Times: user=0.06 sys=0.00, real=0.01 secs]
2021-02-18T11:58:33.041+0800: 4.388: [GC (Allocation Failure) [PSYoungGen: 38399K->5107K(38400K)] 39395K->8534K(125952K), 0.0566775 secs] [Times: user=0.16 sys=0.00, real=0.06 secs]
2021-02-18T11:58:34.392+0800: 5.740: [GC (Allocation Failure) [PSYoungGen: 38387K->5098K(71680K)] 41814K->10989K(159232K), 0.0214275 secs] [Times: user=0.08 sys=0.00, real=0.02 secs]
//元空间gc,达到了元空间的阈值,(使用Parallel Scavenge)新生代,从34271K变成了5112K(内存大小71680K);老年代,从40162K变成了12982K(内存大小159232K),新生代使用时间0.0178599秒,共使用0.06 秒(可以看出,这里元空间的gc时间,是新生代2.5倍)
2021-02-18T11:58:35.110+0800: 6.457: [GC (Metadata GC Threshold) [PSYoungGen: 34271K->5112K(71680K)] 40162K->12982K(159232K), 0.0178599 secs] [Times: user=0.06 sys=0.00, real=0.02 secs]
//full gc,包括新生代、老年代、元空间(永久代,放在方法区里,主要存放类新信息、方法信息等),达到了元空间的阈值,(使用Parallel Scavenge)新生代,从5112K变成了0K(内存大小71680K,完全回收);老年代(使用了ParOld,Parallel Scavenge老年代版本 垃圾回收器),从7870K变成了7740K(内存大小56320K),新生代使用时间0.0790402 秒,共使用0.27 秒(可以看出,这里元空间的gc时间,是新生代的3倍))
2021-02-18T11:58:35.128+0800: 6.475: [Full GC (Metadata GC Threshold) [PSYoungGen: 5112K->0K(71680K)] [ParOldGen: 7870K->7740K(56320K)] 12982K->7740K(128000K), [Metaspace: 20885K->20885K(1069056K)], 0.0790402 secs] [Times: user=0.27 sys=0.00, real=0.08 secs]
2021-02-18T11:58:36.444+0800: 7.792: [GC (Allocation Failure) [PSYoungGen: 66560K->5518K(113152K)] 74300K->13267K(169472K), 0.0080603 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
2021-02-18T11:58:38.382+0800: 9.732: [GC (Allocation Failure) [PSYoungGen: 113038K->8692K(138752K)] 120787K->17655K(195072K), 0.0214940 secs] [Times: user=0.05 sys=0.01, real=0.02 secs]
2021-02-18T11:58:43.737+0800: 15.085: [GC (Metadata GC Threshold) [PSYoungGen: 130761K->10222K(177664K)] 139723K->24379K(233984K), 0.0210900 secs] [Times: user=0.11 sys=0.03, real=0.02 secs]
2021-02-18T11:58:43.759+0800: 15.107: [Full GC (Metadata GC Threshold) [PSYoungGen: 10222K->0K(177664K)] [ParOldGen: 14156K->21200K(92672K)] 24379K->21200K(270336K), [Metaspace: 34810K->34810K(1081344K)], 0.1114812 secs] [Times: user=0.61 sys=0.02, real=0.11 secs]
2021-02-18T11:58:45.481+0800: 16.829: [GC (Allocation Failure) [PSYoungGen: 167424K->9056K(180736K)] 188624K->30264K(273408K), 0.0126356 secs] [Times: user=0.02 sys=0.02, real=0.01 secs]
2021-02-18T11:58:47.195+0800: 18.542: [GC (Allocation Failure) [PSYoungGen: 176480K->11091K(229888K)] 197688K->32308K(322560K), 0.0190669 secs] [Times: user=0.02 sys=0.02, real=0.02 secs]
---------额外连接,gc的算法:
https://blog.csdn.net/high2011/article/details/80177473
------额外连接,gc优化方案
https://jiankunking.com/java-jvm-gc-g1-notes.html
GC日志浅析的更多相关文章
- 浅析JVM中的GC日志
目录 一.GC日志的格式分析 二.运行时开启GC日志 一.GC日志的格式分析 在讲述GC日志之前,我们先来运行下面这段代码 package com.example; public class Test ...
- 【转】gc日志分析工具
性能测试排查定位问题,分析调优过程中,会遇到要分析gc日志,人肉分析gc日志有时比较困难,相关图形化或命令行工具可以有效地帮助辅助分析. Gc日志参数 通过在tomcat启动脚本中添加相关参数生成gc ...
- JVM实用参数(八)GC日志
本系列的最后一部分是有关垃圾收集(GC)日志的JVM参数.GC日志是一个很重要的工具,它准确记录了每一次的GC的执行时间和执行结果,通过分析GC日志可以优化堆设置和GC设置,或者改进应用程序的对象分配 ...
- GC之七--gc日志分析工具
性能测试排查定位问题,分析调优过程中,会遇到要分析gc日志,人肉分析gc日志有时比较困难,相关图形化或命令行工具可以有效地帮助辅助分析. Gc日志参数 通过在tomcat启动脚本中添加相关参数生成gc ...
- 理解GC日志
每一种收集器的日志形式都是由它们自身的实现所决定的,换而言之,每个收集器的日志格式都可以不一样.但虚拟机设计者为了方便用户阅读,将各个收集器的日志都维持一定的共性,例如以下两段典型的GC日志: 33. ...
- GC日志介绍
每一种收集器的日志形式都是由它们自身的实现所决定的,换而言之,每个收集器的日志格式都可以不一样.但虚拟机设计者为了方便用户阅读,将各个收集器的日志都维持一定的共性,例如以下两段典型的GC日志: 33. ...
- 【转载】Java垃圾回收内存清理相关(虚拟机书第三章),GC日志的理解,CPU时间、墙钟时间的介绍
主要看<深入理解Java虚拟机> 第三张 P84 开始是垃圾收集相关. 1. 1960年诞生于MIT的Lisp是第一门采用垃圾回收的语言. 2. 程序计数器.虚拟机栈.本地方法栈3个区域随 ...
- Java GC 日志输出分析
搜到的几篇讲GC日志的文章,学到了很多东西.但是有些错误或者不够精确的地方. 因此自己尝试着总结一下. 先写个程序,然后结合程序解释每句话的意思. 运行参数 -Xms200M -Xmx200M -Xm ...
- 理解Java的GC日志
分析如下GC日志:[GC [PSYoungGen: 9216K->1024K(9216K)] 1246196K->1246220K(1287040K), 0.2398360 secs] [ ...
随机推荐
- k8s初面考点ReplicaSet副本集极限9连击你懂了吗?
k8s初面考点ReplicaSet副本集极限9连击你懂了吗? k8s考点灵魂拷问9连击 考点之简单描述一下k8s副本集ReplicaSet有什么作用? 考点之为什么ReplicaSet将取代Repli ...
- VUE学习笔记(李天禹老师版本)
目录 VUE 一 脚手架文件结构 二 关于不同版本的Vue 三 vue.config.js配置文件 vue文件的基本结构 components 四 ref属性 TIPS 五 props配置项 Tips ...
- 企业环境下如何把ubuntu的dhcp改为静态IP
静态ip不能连接外网 因为老的虚拟机有ubuntu桌面 以及一些磁盘的问题, 想 迁移 自己的虚拟机,连带着把ip也迁移,(公司有些界面是 通过我的虚拟机ip访问的.) 编辑 root@ubuntu: ...
- 关于 Linux Polkit 权限提升漏洞(CVE-2021-4034)的修复方法
镜像下载.域名解析.时间同步请点击阿里云开源镜像站 近日,国外安全团队披露了 Polkit 中的 pkexec 组件存在的本地权限提升漏洞(CVE-2021-4034),Polkit 默认安装在各个主 ...
- PMP之挣值管理(PV、EV、AC、SV、CV、SPI、CPI)的记忆方法
挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三个参数:PV.AC.EV. PV:计划值,在即定时间点前计划完成活动 ...
- 6月27日 ajax
AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JS ...
- 【Vulnhub练习】Billu_b0x
靶机说明 虚拟机难度中等,使用ubuntu(32位),其他软件包有: PHP apache MySQL 目标 Boot to root:从Web应用程序进入虚拟机,并获得root权限. 运行环境 靶机 ...
- 程序流程控制2 for循环
for循环是python中的一个通用的序列迭代器,可以遍历序列对象中的所有对象. 1.for循环基本格式 for循环基本格式如下. for var in object: 循环体语句块 else: 语句 ...
- Go 语言 切片的使用(增删改查)
Go 语言 切片的使用(增删改查) 引言Golang 的数组是固定长度,可以容纳相同数据类型的元素的集合.但是当长度固定了,在使用的时候肯定是会带来一些限制,比如说:申请的长度太大会浪费内存,太小又不 ...
- 洛谷P1091 [NOIP2004 提高组] 合唱队形
本题是一个简单的 LIS(最长上升子序列)问题 只是要求俩次最长上子序列而已 很容易的 首先由于是最长上升子序列 所以朴素法的动态规划表达式为 f[i] = max( f[i] , f[ ...