使用JVM常用GC日志打印参数

目录
  • JVM常用GC日志打印参数
    • 1. PrintGC
    • 2. PrintGCDetails
    • 3. PrintGCTimeStamps
    • 4. PrintGCApplicationStoppedTime
    • 5. PrintGCApplicationConcurrentTime
    • 6. PrintHeapAtGC
  • JVM打印GC日志到文件

JVM常用GC日志打印参数

1. PrintGC

最简单的GC参数。

启用配置:-XX:+PrintGC

日志如下:

根据上面红色方框内的数字1、2、3、4、5说明,1是GC类型,GC:minor GC(young gc),Full GC:major GC,2是GC前堆内存使用量,3是GC后堆内存使用量,4是堆内存总量,5是本次GC耗时

2. PrintGCDetails

打印GC的详细信息

启用配置:-XX:+PrintGCDetails

日志如下:

不同的垃圾回收器,GC日志(表示年代的词)可能会不一样, 和第一节中差不多,->前的是GC前堆内存使用量,->后面是GC后堆内存使用量,括号内是堆内存总量。

对于这个日志,PSYoungGen:年轻代,ParOldGen:老年代,PSPermGen:持久代(方法区)

Times: user表示用户态CPU耗时,sys表示系统CPU耗时,real表示GC实际耗时

3. PrintGCTimeStamps

GC时,打印进程启动到现在经历的时间

启用配置:-XX:+PrintGCTimeStamps

日志如下:

红色方框内的时间,表示进程启动到现在经历的时间

该参数需要配合其它GC日志打印参数一起使用,如下

4. PrintGCApplicationStoppedTime

打印GC时,应用停顿时间

启用配置:-XX:+PrintGCApplicationStoppedTime

日志如下:

5. PrintGCApplicationConcurrentTime

GC时打印应用执行时间

启用配置:-XX:+PrintGCApplicationConcurrentTime

日志如下:

6. PrintHeapAtGC

每次GC前后打印堆信息

启用配置:-XX:+PrintHeapAtGC

日志如下:

p.s. 上面几个参数可同时配合使用,同时使用PrintGC和PrintGCDetails时,打印的详细信息。

GC日志信息默认是打印到控制台,如果需要输出到文件,可以使用参数:-Xloggc:gc.log,gc.log是要输出的日志文件,路径为应用启动路径的相对路径下,也可以使用绝对路径。

JVM打印GC日志到文件

package gc;
public class GcTest {
 private static final int _1MB= 1024 * 1024;
 public static void main(String[] args) {
  byte[] a1, a2, a3, a4;
  a1 = new byte[2 * _1MB];
  a2 = new byte[2 * _1MB];
  a3 = new byte[2 * _1MB];
  a4 = new byte[2 * _1MB];
 }
}

打印GC日志

D:\study\workspace\jvm\src>java -Xms20M -Xmx20M -Xmn10M -XX:Survivor

Ratio=8 -XX:+PrintGCDetails -Xloggc:d:\gc.log gc.GcTest

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • JVM性能调优实战:让你的IntelliJ Idea纵享丝滑

    本文已被Github仓库收录 https://github.com/silently9527/JavaCore 前言 在前面整理了一篇关于JVM故障诊断和处理工具,考虑到大部分的Java程序员都使用的是IntelliJ Idea,本篇就使用工具来实战演练对IntelliJ Idea运行速度调优 调优前的运行状态 原始配置内容 要查询idea原始配置文件的路径可以在VisualVM中的概述中查看 原始配置内容: -XX:ReservedCodeCacheSize=240m -XX:+UseComp

  • JVM Tomcat性能实战(推荐)

    本节只是介绍实战部分,具体的理论参数,请自行百度. 所需工具:linux服务器  Jmeter测试工具  xshell   一个web应用 Tomcat的JVM参数可以配置在catalina.sh,如果是在window上可以配置.bat文件 配置1: 这里 我配置了一个gc日志路径为/home/log/gc.log ,打印gc的日志,初始堆和最大堆内存设置为50M,输出Dump文件在内存溢出的时候 ,使用串行垃圾收集器,永久代大小为50m. 将web应用放到对应的目录,配置好server.xml

  • java虚拟机之JVM调优详解

    JVM常用命令行参数 1. 查看参数列表 虚拟机参数分为基本和扩展两类,在命令行中输入 JAVA_HOME\bin\java就可得到基本参数列表. 在命令行输入 JAVA_HOME\bin\java –X就可得到扩展参数列表. 2. 基本参数说明: -client,-server: 两种Java虚拟机启动方式,client模式启动比较快,但是性能和内存管理相对较差,server模式启动比较慢,但是运行性能比较高,windos上采用的是client模式,Linux采用server模式 -class

  • 使用JVM常用GC日志打印参数

    目录 JVM常用GC日志打印参数 1. PrintGC 2. PrintGCDetails 3. PrintGCTimeStamps 4. PrintGCApplicationStoppedTime 5. PrintGCApplicationConcurrentTime 6. PrintHeapAtGC JVM打印GC日志到文件 JVM常用GC日志打印参数 1. PrintGC 最简单的GC参数. 启用配置:-XX:+PrintGC 日志如下: 根据上面红色方框内的数字1.2.3.4.5说明,1

  • 聊聊如何打印GC日志排查的问题

    目录 如何打印GC日志排查问题 先来看个示例 那么上面打印出来的日志,具体是什么意思呢? 小结一下 gc日志打印时间戳 如何打印GC日志排查问题 在工作当中,有时候我们会需要打印GC的相关信息来定位问题.该如何做呢? 先来看个示例 public static void main(String[] args) { List<Integer> list0 = new ArrayList<>(); long start0 = System.currentTimeMillis(); for

  • JVM完全解读之GC日志记录分析

    相信大家在系统学习jvm的时候都会有遇到过这样的问题,散落的jvm知识点知道很多,但是真正在线上环境遇到一些莫名其妙的gc异常时候却无从下手去分析. 关于这块的苦我也表示能够理解,之前光是JVM相关的八股文就整理了许多,但是经常是不知道如何在实战中使用.最近也尝试在模拟一些案例来训练自己的JVM相关知识,本文特意记录下这段调优经历. Java应用的GC评估 可能大多数程序员在开发完某个需求之后,往线上环境一丢,然后就基本不怎么关注后续的变化了.但是是否有考虑过,这些新引入的代码会对原有系统造成的

  • springboot下mybatis-plus如何打印sql日志和参数到日志文件

    最近在使用springboot过程中用到了mybatis-plus ,springboot版本是2.3.1.RELEASE,mybatis-plus 版本3.2.0. <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dep

  • Nginx设置日志打印post请求参数的方法

    [前言] 我们项目的短信功能是接第三方,原来对接第三方给我们回执确认请求是get请求我们在排查问题的时候可以通过nginx的日志拿到对方给我们请求的参数:最近我们换了另外一家第三方,新的第三方给我们的确认请求是post,遇到问题排查,发现nginx没有打印具体参数,于是查阅一些资料和运维一起做了实验和线上调整,调整后我们可以拿到请求参数,更方便我们排查问题: [Nginx设置打印post请求参数]            一.Nginx配置文件(nginx.conf)设置打印post请求参数:在h

  • java基础学习JVM中GC的算法

    在java学习到JVM时候,总会很多朋友问到关于GC算法的问题,小编在此给大家整理关于JVM中GC算法的原理以及图文详细分析,希望能够帮助你对这个GC算法的理解. JVM内存组成结构: (1)堆 所有通过new创建的对象都是在堆中分配内存,其大小可以通过-Xmx和-Xms来控制,堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区.Survivor被划分为from space 和 to space组成,结构图如下: (2)栈 每个线程 执行每个方法的时候都会在栈中申请一个

  • Java虚拟机GC日志分析

    本文研究的主要是Java虚拟机中gc日志的理解问题,具体如下. 一.日志分析 理解GC日志是处理Java虚拟机内存问题的基本技能. 通过在java命令种加入参数来指定对应的gc类型,打印gc日志信息并输出至文件等策略. 1.编写java代码 public class ReferenceCountingGC { public Object instance = null; private static final int ONE_MB = 1024 * 1024; private byte[] b

  • springboot配置aop切面日志打印过程解析

    这篇文章主要介绍了springboot配置aop切面日志打印过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.SpringBoot Aop说明 1. Aop AOP(Aspect-Oriented Programming,面向切面编程),它利用一种"横切"的技术,将那些多个类的共同行为封装到一个可重用的模块.便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性. 2. AOP相关概念: Aspect

  • Spring Boot如何通过自定义注解实现日志打印详解

    前言 在我们日常的开发过程中通过打印详细的日志信息能够帮助我们很好地去发现开发过程中可能出现的Bug,特别是在开发Controller层的接口时,我们一般会打印出Request请求参数和Response响应结果,但是如果这些打印日志的代码相对而言还是比较重复的,那么我们可以通过什么样的方式来简化日志打印的代码呢? SpringBoot 通过自定义注解实现权限检查可参考我的博客:SpringBoot 通过自定义注解实现权限检查 正文 Spring AOP Spring AOP 即面向切面,是对OO

  • SpringBoot通过自定义注解实现日志打印的示例代码

    前言 在我们日常的开发过程中通过打印详细的日志信息能够帮助我们很好地去发现开发过程中可能出现的Bug,特别是在开发Controller层的接口时,我们一般会打印出Request请求参数和Response响应结果,但是如果这些打印日志的代码相对而言还是比较重复的,那么我们可以通过什么样的方式来简化日志打印的代码呢? SpringBoot 通过自定义注解实现权限检查可参考我的博客:SpringBoot 通过自定义注解实现权限检查 正文 Spring AOP Spring AOP 即面向切面,是对OO

随机推荐