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。

你可能感兴趣的:(JVM,java,jmap,dump,mat,内存分析)