打印GC日志

1.在Arguments 设置 VM Arguments:-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8
2.测试代码及日志打印
    public class MinorGCExample {

	private static final int _1MB=1024*1024;
	
	public static void testAllocation() {
		byte[] allocation1,allocation2,allocation3,allocation4;
		allocation1=new byte[2*_1MB];
		allocation2=new byte[2*_1MB];
		allocation3=new byte[2*_1MB];
		allocation4=new byte[4*_1MB];
	}
	public static void main(String[] args) {
		MinorGCExample.testAllocation();
	}
}

日志打印:
Heap
 PSYoungGen      total 9216K, used 7128K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
  eden space 8192K, 87% used [0x00000000ff600000,0x00000000ffcf6038,0x00000000ffe00000)
  from space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
  to   space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
 ParOldGen       total 10240K, used 4096K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
  object space 10240K, 40% used [0x00000000fec00000,0x00000000ff000010,0x00000000ff600000)
 Metaspace       used 2647K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 285K, capacity 386K, committed 512K, reserved 1048576K

 

 

 3.日志分析:对象优先在Eden分配

    I.当新生对象在Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机会进行一次Minor GC(新生代) 

    ||.Arguments VM参数介绍:-XX:PrintGCDetails收集器日志参数,告诉虚拟机进行垃圾回收打印回收日志,程序退出时输出当           前内存区域分配情况。

    |||.testAllocation()方法中,尝试分配3个2MB大小和一个4MB大小,-Xms20M、-Xmx20M、-Xmn10M这三个参数限制了堆的           大小不可扩展,新生代分配10M,剩余的10M分配给老年代。-XX:SurvivorRatio=8e决定了新生代中的Eden与Survivor区的空         间比例为8:1

 

<think>我们是在GraalVM的JDK17环境下配置GC日志,需要将日志输出到指定文件,并且设置文件大小限制(滚动策略)。根据之前提供的知识,我们知道在JDK9+中使用了新的-Xlog参数来替代旧的GC日志参数(如-Xloggc)。关键点:1.使用`-Xlog`来配置日志,语法为:`-Xlog:[选择器]:[输出][:装饰器][:输出选项]`2.选择器:用于选择要记录的日志标签和级别,例如`gc*`表示所有gc标签的日志(包括debug、info等),`gc+heap=debug`表示记录heap相关的debug级别日志。3.输出:指定输出文件,使用`file=<文件路径>`。4.装饰器:可以添加时间戳、进程ID等,例如`time,uptimemillis`。5.输出选项:包括文件滚动策略,如`filecount=5,filesize=10M`表示保留5个文件,每个文件最大10MB。根据用户要求,我们想要将GC日志输出到指定文件,并限制日志大小(即滚动策略)。因此,我们可以这样配置:基本命令格式:```java-Xlog:gc*:file=/path/to/gc.log::filecount=5,filesize=10M:time,uptimemillis-jaryour_application.jar```解释:-`-Xlog:gc*`:记录所有标签为gc日志(包括gcgc+age等)。-`:file=/path/to/gc.log`:指定日志文件路径。-`::filecount=5,filesize=10M`:注意这里是两个冒号,第一个冒号后面是输出(file=...),第二个冒号后面是输出选项,这里设置了滚动策略:最多保留5个文件,每个文件10MB。滚动策略紧跟在文件路径后面,用两个冒号分隔(因为中间没有装饰器,所以装饰器部分为空)。-`:time,uptimemillis`:在日志中添加当前时间戳和JVM启动后的毫秒数。注意:在实际使用中,请将`/path/to/gc.log`替换为实际路径,并确保该路径有写入权限。另外,我们也可以将多个选择器组合,比如同时记录gc*和gc+heap的日志,并设置不同级别:```-Xlog:gc*,gc+heap=debug:file=/path/to/gc.log::filecount=5,filesize=10M:time,uptimemillis```在GraalVM原生镜像构建时(如果构建的是nativeimage),则需要在构建时通过`-R:JvmOptions`来设置(因为原生镜像在构建时就需要指定运行时参数):```native-image--gc=G1\-R:JvmOptions='-Xlog:gc*:file=/path/to/gc.log::filecount=5,filesize=10M:time,uptimemillis'\-jaryour_application.jar```如果只是运行在GraalVM的JVM模式下(比如使用java命令运行),则直接使用java命令添加参数即可。因此,针对用户当前的问题,回答如下:</think> ### GraalVM JDK17 GC日志配置指南 在GraalVM JDK17中,通过统一日志系统(JUL)配置GC日志,使用`-Xlog`参数实现日志输出控制和滚动策略: #### 配置语法 ```bash java -Xlog:gc*:<output>[<decorators>][<options>] -jar your_app.jar ``` #### 完整参数示例 ```bash java -Xlog:gc*:file=gc_%p_%t.log::filecount=5,filesize=50M:time,uptimemillis -jar app.jar ``` #### 核心参数解析 | **配置项** | **参数示例** | **功能说明** | |------------|--------------|--------------| | **日志输出** | `file=gc_%p_%t.log` | 动态文件名格式:<br>`%p`=进程ID, `%t`=时间戳[^1] | | **滚动策略** | `::filecount=5,filesize=50M` | 保留5个文件,<br>单个上限50MB | | **时间戳格式** | `:time,uptimemillis` | UTC时间 + JVM启动时长(ms)[^3] | | **监控范围** | `gc*` | 捕获所有GC事件 | | **GC回收器** | `-XX:+UseG1GC` | 显式指定G1回收器 | #### 参数验证方式 ```bash # 验证日志配置有效性 java -Xlog:help ``` #### 容器环境配置 ```Dockerfile ENV JAVA_TOOL_OPTIONS="-Xlog:gc*:file=/logs/gc.log::filecount=3,filesize=100M:time" VOLUME /logs ``` #### 特殊场景说明 若需无GC模式(类似EpsilonGC): ```bash native-image -R:+UseEpsilonGC ... # 禁用GC回收器[^4] ``` ```mermaid graph LR A[启动参数] --> B{日志配置} B --> C[输出路径] B --> D[滚动策略] B --> E[时间格式] C --> F[/var/log/app/gc.log/] D --> G(保留5个文件<br>单个50MB) E --> H[2024-06-01T12:34:56.789+0800<br>JVM uptime=123.456s] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值