JVM 性能调优——HotSpot VM 调优记录
宿主机硬件:8核/16G内存/50G磁盘,系统:CentOS 7.7,Docker 单实例。
1.JDK默认启动参数
硬件:4核/8G内存/256G磁盘,系统:Windows 7。
查看 JDK1.8 默认启动参数命令:
# java -XX:+PrintCommandLineFlags -version
返回:
-XX:InitialHeapSize=126504256 //等价于-Xms1g,JVM 堆初始大小(新生代 + 老年代) -XX:MaxHeapSize=2024068096 //等价于-Xmx2g,JVM 堆最大大小(新生代 + 老年代) -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC java version "1.8.0_201" Java(TM) SE Runtime Environment (build 1.8.0_201-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
2.IO密集型系统调优
硬件:8核/16G内存/50G磁盘,系统:CentOS 7.2。
我们系统的特点:
-
IO 密集型系统,注重响应速度,低停顿时间,以给用户带来较好的体验,那么选择 ParNew + CMS 收集器就非常合适了; IO 密集型系统随 IO 的增大,性能会降低;
通过分析 Heap Dump 并结合压测结果,我们增加了以下调优参数:
-Xms4096m //JVM 堆初始大小 -Xmx4096m //JVM 堆最大大小 -XX:MaxPermSize=256m //设置最大非堆内存的大小 -XX:MetaspaceSize=256m //元数据空间的初始大小 -XX:NewRatio=1 //新生代和老年代的比值,1 表示新生代:老年代=1:1,即新生代占堆的1/2 -XX:ParallelGCThreads=8 //在进行并行GC的时候,可用于GC的线程数 -XX:GCTimeRatio=19 -XX:MaxGCPauseMillis=50 -XX:+UseAdaptiveSizePolicy
通过压测,发现整体性能提高了 10% 左右。
除了自己加的调优参数,我们的服务里还包含了容器实例本身的一些参数,这里做一下记录,启动 JVM 后的所有运行参数:
-Dlog.path.prefix=/export/Logs/simplesoa/server1 -Ddeploy.app.id=4465 -Ddeploy.app.name=simplesoa -Ddeploy.instance.id=937885 -Ddeploy.data.path=/export/Instances/simplesoa -Ddeploy.logs.path=/export/Logs/simplesoa -Ddeploy.instance.logs.path=/export/Logs/simplesoa/server1 -Dins_id=937885 -Ddeploy.dynamic.config.dir=/export/Packages/simplesoa/20190826100010/WEB-INF/classes -Djava.util.logging.config.file=/export/Instances/simplesoa/server1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.library.path=/usr/local/lib -Xms4096m -Xmx4096m -XX:MaxPermSize=256m -XX:+UnlockExperimentalVMOptions -XX:MetaspaceSize=256m -XX:NewRatio=1 -XX:ParallelGCThreads=8 -XX:GCTimeRatio=19 -XX:MaxGCPauseMillis=50 -XX:+UseAdaptiveSizePolicy -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=60000 -Dsun.net.client.defaultReadTimeout=60000 -Djmagick.systemclassloader=no -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.ttl=300 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/Instances/simplesoa/server1/logs -XX:ErrorFile=/export/Instances/simplesoa/server1/logs/java_error_%p.log -Xbootclasspath/a:/export/Packages/simplesoa/20190826100010/WEB-INF/lib/jst-jvm-enhance-1.0.0-SNAPSHOT.jar -javaagent:/export/Packages/simplesoa/20190826100010//WEB-INF/lib/jst-jvm-enhance-1.0.0-SNAPSHOT.jar -Djava.endorsed.dirs=/export/servers/tomcat8.5.45/endorsed -Dcatalina.base=/export/Instances/simplesoa/server1 -Dcatalina.home=/export/servers/tomcat8.5.45 -Djava.io.tmpdir=/export/Instances/simplesoa/server1/temp
3.CPU密集型系统调优
硬件:8核/16G内存/50G磁盘,系统:CentOS 7.2。