2022年2月5日
jvm的一些参数,调优基础
-XX:+PrintGC +表示开启,-表示关闭 可以用jinfo 来查具体的配置是否开启 -XX:+PrintGCDetails
jps -l 打印java程序
指定新生代的内存:-Xmn 新生代(eden+from+to)和老年代(不包含永久区)的比值:-XX:NewRatio Survivor区与Eden区的比值:-XX:SurvivorRatio 这2个比值的计算规则如下: 若-XX:NewRatio=4,则表示新生代:老年代=1:4,那么新生代(eden+from+to)=3072+512+512=4096k,老年代=16384k,新生代:老年代=4096k:16384k=1:4。 若-XX:SurvivorRatio=6,则表示Survivor区:Eden区=2:6,那么Survivor区(from+to)=1024+1024=2048,Eden区=6144,Survivor区:Eden区=2048:6144=2:6,这样的话,一个幸存区占整个新生代区的1:(2+6)=1/8
jinfo -flags pid
常用的JVM参数,你知道多少? – 知乎 (zhihu.com)
这里就不完全记录了,搜一下即可
下面是一个例子,展示如何进行基本的JVM调优,主要针对堆内存和GC的调整:
- 设置堆内存大小:堆内存是Java用于动态分配内存的地方,是垃圾收集器管理的主要区域。Java应用需要足够的堆内存来创建和操作对象。以下是两个设置堆内存大小的参数:bashCopy code
-Xms1024m # 设置堆的初始大小为1024MB -Xmx1024m # 设置堆的最大大小为1024MB
如果您的Java应用需要更多的内存,或者要处理更大的数据集,可以相应地增大这两个值。 - 选择垃圾收集器:Java有多种垃圾收集器,如Serial GC,Parallel GC,Concurrent Mark Sweep (CMS) GC,G1 GC,ZGC等,选择哪种GC,取决于你的应用类型和性能需求。比如如果你的应用要求更短的GC停顿时间,可以选择CMS或G1,如果要求更高的吞吐量,可以选择Parallel GC。以下是设置垃圾收集器的参数:bashCopy code
-XX:+UseParallelGC # 使用Parallel GC -XX:+UseConcMarkSweepGC # 使用CMS GC -XX:+UseG1GC # 使用G1 GC
- 设置新生代和老年代的比例:堆内存被分为新生代和老年代,新创建的对象首先在新生代分配,经过几次GC后,如果对象仍然存活,就会被移动到老年代。你可以通过设置新生代和老年代的比例,来优化GC性能。以下是设置新生代和老年代比例的参数:bashCopy code
-XX:NewRatio=2 # 设置老年代大小是新生代大小的2倍
- 开启GC日志:GC日志是理解和分析GC行为的重要工具,你可以通过开启GC日志来获取GC的详细信息。以下是开启GC日志的参数:bashCopy code
-XX:+PrintGCDetails # 输出详细的GC日志 -Xloggc:gc.log # 将GC日志输出到名为gc.log的文件
以上只是一些基本的JVM调优示例,并不能覆盖所有的调优情况。更复杂的场景可能需要更复杂的调优策略和参数设置。在进行JVM调优时,一定要充分理解你的应用,持续监控和分析性能数据,并根据实际情况进行调整。