JVM参数优化

2024 / 7 / 23

新的JVM参数

start_cmd="nohup java -server -Xmx2048m -Xms2048m -Xmn128m\ -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Xss256k -XX:+DisableExplicitGC\ -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m\ -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly\ -XX:CMSInitiatingOccupancyFraction=70 -Duser.timezone=GMT+8\ -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps\ -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+HeapDumpOnOutOfMemoryError\ -XX:HeapDumpPath=/tmp/b2b_interface.dump -Xloggc:/tmp/b2b_interface_gc.log -verbose:gc -Xmixed -XX:-CITime -Dfile.encoding=UTF-8\ ${env_args}\ -jar ${server_jar}\ ${listen_port_args} > /dev/null 2>&1 &"

老的JVM参数

start_cmd="nohup java -server -Xmx2048m -Xms2048m -Xmn1024m\ -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Xss256k -XX:+DisableExplicitGC\ -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m\ -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly\ -XX:CMSInitiatingOccupancyFraction=70 -Duser.timezone=GMT+8\ -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps\ -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+HeapDumpOnOutOfMemoryError\ -XX:HeapDumpPath=/tmp/b2b_interface.dump -Xloggc:/tmp/b2b_interface_gc.log -verbose:gc -Xmixed -XX:-CITime -Dfile.encoding=UTF-8\ ${env_args}\ -jar ${server_jar}\ ${listen_port_args} > /dev/null 2>&1 &"

优化分析

年轻代(Young Generation)内存设置为 128 MB 确实可能不太合理,尤其是在内存总量较大的情况下。年轻代的内存太小可能会导致频繁的垃圾收集(Minor GC),影响应用性能。合理的年轻代内存设置应根据应用程序的对象分配速率和对象生命周期来确定。

合理的年轻代内存设置建议

1. 评估对象分配速率:

• 如果应用程序频繁创建和销毁大量对象,年轻代内存应适当增大以减少 Minor GC 的频率。

2. 使用经验法则:

• 一般情况下,年轻代内存通常设置为堆内存总量的 1/3 到 1/2。

• 例如,如果堆内存总量为 2048 MB,年轻代内存可以设置为 512 MB 到 1024 MB 之间。