JVM 参数手册

用户头像
Rayjun
关注
发布于: 2020 年 08 月 01 日
JVM参数手册

有时候找到了一个JVM参数,以为找到了一份武林秘籍,就偷偷在服务器把参数加上,结果第二天就收获一个事故通报。



本文对常用 JVM 常用参数做了一个整理,但是参数的使用很复杂,本文仅仅提供常用参数的查阅,具体的使用还是需要根据具体的情况。



JVM 是一个开放的标准,谁可以来实现 JVM,这导致不同JVM 实现的参数有所不同,本文基于 Hotspot 虚拟机。



JVM 参数很多,总体上可以分成三类:



  • -:标准参数,比如 -verbose:gc 这类表示标准实现,所有的虚拟机都需要实现这些参数的功能,且向后兼容

  • -X:非标准参数,默认 JVM 会实现这些参数的功能,但是不保证所有的 JVM 实现都满足,且不保证向后兼容

  • -XX:非 Stable 参数,这些参数在不同的 JVM 上会有不同的实现,这些参数不推荐在生成环境中使用,以后很有可能会被取消

- 对于布尔型参数:-XX:+ 表示打开,-XX:- 表示关闭,比如: -XX:+PrintGCDetails

- 对于其他的数字或者字符参数:-XX: 表示设定一个值



通用参数



GC 参数



在 JDK9 以后,日志相关的参数的都统一到了 -Xlog 中,注意,不仅仅 gc 的日志,是所有的日志,对于 -Xlog,配置方法如下:



-Xlog[:[selector][:output[:[decorators][:output-options]]]]



其中 selector 是 tag 和日志 level 的组合体,tag 就是日志类别,gc 只是其中的一种 tag,如果要输出 GC 日志,使用方式如下:



-Xlog:gc



level 的取值有:off,trace,debug,info,warning,error。



output 就是日志的输出形式,可以使用的方式有:



  • stdout

  • stderr

  • file=



decorators 称之为装饰器,可以在 GC 日志中增加其他的信息,方便对问题进行定位,装饰器可以同时使用多个,下面是对装饰器的汇总:



在默认情况下,会使用 uptime,level 以及 tags 等装饰器,也可以使用 none 来关闭所有的装饰器。



假如说现在要获取日志等级为info,需要打印机器名称、日志等级,JVM 的运行时间,所属 tag,并且要把这些日志保存为 gc.log 文件,配置如下:



-Xlog:gc*=info:file=gc.log:hostname,level,uptime,tags



常用的 GC 日志参数如下:



GC日志参数





其他GC参数





REF



[1] https://openjdk.java.net/jeps/158



[2] https://docs.oracle.com/en/java/javase/11/tools/java.html#GUID-3B1CE181-CD30-4178-9602-230B800D4FAE



[3] https://www.oracle.com/java/technologies/javase/vmoptions-jsp.html



[4] https://segmentfault.com/a/1190000013475524



文 / Rayjun

本文首发于公众号 Rayjun





发布于: 2020 年 08 月 01 日 阅读数: 41
用户头像

Rayjun

关注

程序员,王小波死忠粉 2017.10.17 加入

非著名程序员,还在学习如何写代码,公众号同名

评论

发布
暂无评论
JVM参数手册