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,配置方法如下:
其中 selector 是 tag 和日志 level 的组合体,tag 就是日志类别,gc 只是其中的一种 tag,如果要输出 GC 日志,使用方式如下:
level 的取值有:off,trace,debug,info,warning,error。
output 就是日志的输出形式,可以使用的方式有:
stdout
stderr
file=
decorators 称之为装饰器,可以在 GC 日志中增加其他的信息,方便对问题进行定位,装饰器可以同时使用多个,下面是对装饰器的汇总:
在默认情况下,会使用 uptime,level 以及 tags 等装饰器,也可以使用 none 来关闭所有的装饰器。
假如说现在要获取日志等级为info,需要打印机器名称、日志等级,JVM 的运行时间,所属 tag,并且要把这些日志保存为 gc.log 文件,配置如下:
常用的 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
版权声明: 本文为 InfoQ 作者【Rayjun】的原创文章。
原文链接:【http://xie.infoq.cn/article/fc1ee54070db7cd5e47be5e4a】。文章转载请联系作者。
评论