虚拟机及垃圾收集器日志
1、JDK9 日志
在JDK 9以前,HotSpot并没有提供统一的日志处理框架,虚拟机各个功能模块的日志开关分布在不同的参数上,日志级别、循环 日志大小、输出格式、重定向等设置在不同功能上都要单独解决。
直到JDK 9,这种混乱不堪的局面 才终于消失,HotSpot所有功能的日志都收归到了“-Xlog”参数上,这个参数的能力也相应被极大拓展 了:
-Xlog[:[selector][:[output][:[decorators][:output-options]]]]
选择器(Selector)最关键,以下两部分
-
- 标签(Tag),虚拟机中某个功能模块的名字:add,age,alloc,annotation,aot,arguments,attach,barrier,biasedlocking,blocks,bot,breakpoint,bytecode
- 日志级别(Level),共有Trace,Debug,Info,Warning,Error,Off六种级别,默认级别为Info
修饰器(Decorator),每行日志输出都附加上额外的内容,如果不指定,默认值是uptime、level、tags这三个
-
- time or t:当前日期和时间。
- uptime or u:虚拟机启动到现在经过的时间,以秒为单位。
- timemillis or tm:当前时间的毫秒数,相当于System.currentTimeMillis()的输出。
- uptimemillis or um:虚拟机启动到现在经过的毫秒数。
- timenanos or tn:当前时间的纳秒数,相当于System.nanoTime()的输出。
- uptimenanos or un:虚拟机启动到现在经过的纳秒数。
- pid or p:进程ID。
- tid or ti:线程ID。
- level or l:日志级别。
- tags or tg:日志输出的标签集。
输出选项(output-options)
-
- stdout
- stderr
- file=filename.%p.%l.%t (后缀可将 将进程PID、时间戳等信息作为文件名的一部分)
举例
1、打印 gc 和class 两个模块的日志信息,打印的日志级别是Info
java -Xlog:gc,class=info pid
2、打印 gc 和 heap 两模块的 info 级别信息到日志debug文件中,并且把其中的进程信息和时间戳作为文件名一部分。日志带有附加信息:t 当前时间、um 启动历时、ti 线程 id。会对文件进行滚动切割,只保留5个文件,每个文件大小是1024个字节
java -Xlog:gc,heap=info:file=/home/debug.%p.%t.log:t,um,hn,p,ti,l,tg:filecount=5,filesize=1024
pid
2、JDK9 前后举例
1、查看GC基本信息,在JDK 9之前使用 -XX:+PrintGC,JDK 9后使用-Xlog:gc:
2、查看GC详细信息,在JDK 9之前使用 -XX:+PrintGCDetails,在JDK 9之后使用 -Xlog:gc*, 用通配符*将GC标签下所有细分过程都打印出来,如果把日志级别调整到Debug或者Trace(-Xlog:gc*),还将获得更多细节信息:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek “源神”启动!「GitHub 热点速览」
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器