1、调优指令
-
设置JVM内存的参数有四个:
-Xmx Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;
-Xms Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;
-Xmn Java Heap Young区大小,不熟悉最好保留默认值;
-Xss 每个线程的Stack大小,不熟悉最好保留默认值;
-
常见参数设置:
参数及其默认值 | 描述 |
---|---|
-XX:-UseSerialGC | 启用串行GC |
-XX:-UseParallelGC | 启用并行GC |
-XX:-UseConcMarkSweepGC | 对老生代采用并发标记交换算法进行GC |
-XX:MaxNewSize=size | 新生成对象能占用内存的最大值 |
-XX:MaxPermSize=64m | 老生代对象能占用内存的最大值 |
-XX:NewSize=2.125m | 新生代对象生成时占用内存的默认值 |
-XX:NewRatio=2 | 新生代内存容量与老生代内存容量的比例 |
3.调优案例
set CATALINA_OPTS= -Xmx4096m -Xms4096m -Xmn1536m -Xss1m
-XX:SurvivorRatio=8 -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M
-XX:+UseG1GC -XX:ConcGCThreads=4 -XX:G1HeapRegionSize=8m -XX:+PrintGCDetails
2.JVM调优总结:
Jvm调优的重点是垃圾回收(gc,garbage collection)和内存管理。垃圾回收的时候会导致
整个虚拟机暂停服务。因此,应该尽可能地缩短垃圾回收的处理时间。
在JVM启动参数中,可以设置跟内存、垃圾回收相关的一些参数设置,让jvm获得最佳性能.
1、开启-server模式,(启动虽然慢,但是运行效率高)
2、针对JVM堆的设置一般,可以通过-Xms -Xmx限定其最小、最大值,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,我们通常把最大、最小设置为相同的值
3、年轻代和年老代将根据默认的比例(1:2)分配堆内存年轻代和年老代设置多大才算合理?这个我问题毫无疑问是没有答案的,否则也就不会有调优。(原则是是减少GC的频率和Full GC的次数)
4、在配置较好的机器上(比如多核、大内存),可以为年老代选择并行收集算法: -XX:+UseParallelOldGC ,默认为Serial收集
5、线程堆栈的设置:每个线程默认会开启1M的堆栈,用于存放栈帧、调用参数、局部变量等,对大多数应用而言这个默认值太了,一般256K就足用。理论上,在内存不变的情况下,减少每个线程的堆栈,可以产生更多的线程,但这实际上还受限于操作系统。