一.JVM 启动参数规则:-、-X、-XX、-D
参考:https://blog.csdn.net/liujianyangbj/article/details/115215680
通过JVM运行一个java程序的时候,我们通常会用java -jar xxxx.jar 的命令,我们通常都会根据情况配置很多的运行参数。这些参数可以分为四类:
1.以 -
开头的是标准参数,所有JVM都支持,并且向后兼容
-verbose:gc
-server
2.以 -X
开头的为非标准参数,绝大多数都是控制JVM的参数
-Xmx2G
-Xms2G
-Xloggc:/data/kinyang/log/gc.%t.log
3.以-XX:
开头的为非稳定参数,专门用于控制JVM行为
-XX:+UseParNewGC
-XX:CompileThreshold=10
-XX:HeapDumpPath=/data/kinyang/dump/heap/
-XX:+ 启用option,例如:-XX:+PrintGCDetails启动打印GC信息的选项,其中+号表示true,开启的意思
-XX:- 不启用option,例如:-XX:-PrintGCDetails关闭启动打印GC信息的选项,其中-号表示false,关闭的意思
-XX:= 设定option的值为数字类型,可跟单位,例如 32k, 1024m, 2g。例如:-XX:MaxPermSize=64m
-XX:= 设定option的值为字符串,例如: -XX:HeapDumpPath="/data/kinyang/dump/heap/"
4.以-D
开头的是系统参数赋值(可以是系统默认有的参数,也可以是自己定义的参数),在程序中可以通过System.getProperty(key)获取和通过System.setProperty(key, value)进行设置
-Dfile.encoding=UTF-8
-Dlog.path=/data/kinyang/test/log/
二. -Javaagent:
Javaagent是java命令的一个参数。参数 javaagent 可以用于指定一个 jar 包,并且对该 java 包有2个要求:
1.这个 jar 包的 MANIFEST.MF 文件必须指定 Premain-Class 项。
2. Premain-Class 指定的那个类必须实现premain() 方法。
premain 方法,从字面上理解,就是运行在 main 函数之前的的类。当Java 虚拟机启动时,在执行 main 函数之前,JVM 会先运行-javaagent所指定 jar 包内 Premain-Class 这个类的 premain 方法 。
使用方法:
定义一个 MANIFEST.MF 文件,必须包含 Premain-Class 选项,通常也会加入Can-Redefine-Classes 和 Can-Retransform-Classes 选项。
创建一个Premain-Class 指定的类,类中包含 premain 方法,方法逻辑由用户自己确定。
将 premain 的类和 MANIFEST.MF 文件打成 jar 包。
使用参数 -javaagent: jar包路径 启动要代理的方法。
三.服务启动参数示例
-javaagent:/home/lk/test_perf_2/default/approot/lib/tracer-agent.jar
-Dstatic_deploy_home=/home/test/test_perf_2/default/approot
-DinstanceName=default
-Dserver.port=10019
-DdeployAppClusterName=test_perf_2
-Dspring.profiles.active=lk-pref-test
四.文章推荐
下面是个人觉得讲得挺不错的一些博客文章
1.java高级话题专栏 https://blog.csdn.net/aitangyong/category_2159887.html
2.JDK1.8应用启动出现fullgc问题解决方案 http://www.linkedkeeper.com/1453.html
3.JVM源码分析之Metaspace解密 http://lovestblog.cn/blog/2016/10/29/metaspace/