启动参数
/bin/java -Dspring.profiles.active=dev -server -Xmx2048m -Xms2048m -Xmn1024m
-XX:SurvivorRatio=3 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=logs/heapdump.log -Xloggc:logs/gc.log -jar test.jar
标准参数
标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容(输入命令java -help或java -?就能获得当前机器所有java的标准参数列表。)
- -client :客户端模式启动,启动很快,但性能和内存管理效率并不高;多用于桌面应用
- -server: 使用server模式,启动速度虽然慢(比client模式慢10%左右),但是性能和内存管理效率很高,适用于服务器,用于生环境、开发环境或测试环境的服务端;
- -Djava.net.preferIPv4Stack 禁用IPv6
-Duser.timezone=Asia/Shanghai 设置时区
非标准参数
非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;输入“java -X”命令,能够获得当前JVM支持的所有非标准参数列表。
-Xmn 新生代内存的最大值,包括Eden区和两个Survivor区的总和
- -Xms 初始堆内存的大小,也是堆的最小值
- -Xmx 堆内存的最大值(建议与Xms值大小设置相同)
- -Xss 设置线程最大栈空间
-Xloggc:file 将每次GC事件的相关情况记录到一个文件中
不稳定参数
不稳定参数(-XX),虽然在官方文档中是不确定的,不健壮的,各个公司的实现也各有不同,但往往非常实用,有以下分类
性能参数( Performance Options)用于JVM的性能调优和内存分配控制,如初始化内存大小的设置;
- 行为参数(Behavioral Options)用于改变JVM的基础行为,如GC的方式和算法的选择;
- 调试参数(Debugging Options)用于监控、打印、输出等jvm参数,用于显示jvm更加详细的信息;
对于非Stable参数,使用方法有4种:
- -XX:+
- -XX:-
- -XX:
- -XX:
参数介绍:
- -XX:SurvivorRatio=8, Eden区内存与Survivor区内存的比例;比如”new” generation一共10M内存,那么
Eden space of 7.5 MB, “from” Survivor space of 1.25 MB and “to” Survivor space of 1.25 MB。HotSpot VM的默认值为8
- -XX:NewRatio=2, 默认的新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2
- -XX:MaxTenuringThreshold=15,对象在新生代存活区切换的次数(坚持过MinorGC的次数,每坚持过一次,该值就增加1),大于该值会进入老年代。HotSpot VM的默认值为15.
- -XX:NewSize=2m 堆中新生代区域默认大小
- -XX:MaxNewSize=size 堆中新生代区域最大大小
- -XX:ThreadStackSiz=size 设置线程栈的大小,默认1024KB
监控工具
jdk中的bin目录中默认安装许多官方自带工具来监控Java程序的运行状态。
Jps
jstat
jtat可以实时显示本地或远程JVM进程中类装载、内存、垃圾收集、JIT编译等数据
jinfo
jmap
用于显示当前Java堆和永久代的详细信息,也可以转储当前内存文件。
-
jstack
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息
查找负载高的进程,先使用top命令查负载较高的进程,然后使用top -Hp $pid查找负载较高的线程,再通过对比线程id来定位问题代码。
参考
- GC参数详解:http://www.herongyang.com/Java-GC/index.html
- java1.8 JVM参数:http://www.kailing.pub/article/index/arcid/210.html
- Heap dump:https://www.jianshu.com/p/45415ebe0721?utm_source=oschina-app
- jstack使用: https://www.cnblogs.com/snake23/p/10329149.html
- java OOM分析:https://www.cnblogs.com/ThinkVenus/p/6805495.html
- load:https://blog.csdn.net/weixin_33997389/article/details/93634893
- JVM监控与调优:https://www.cnblogs.com/zhguang/p/Java-JVM-GC.html