SpringBoot中JVM调优

SpringBoot中JVM调优

一、修改配置文件

关于修改配置文件application.properties

server.tomcat.max-connections=0 # Maximum number of connections that the server accepts and processes at any given time.
server.tomcat.max-http-header-size=0 # Maximum size, in bytes, of the HTTP message header.
server.tomcat.max-http-post-size=0 # Maximum size, in bytes, of the HTTP post content.
server.tomcat.max-threads=0 # Maximum number of worker threads.
server.tomcat.min-spare-threads=0 # Minimum number of worker threads.

其他一些参数:

server.tomcat.access-log-pattern= # log pattern of the access log
server.tomcat.access-log-enabled=false # is access logging enabled
server.tomcat.protocol-header=x-forwarded-proto # ssl forward headers
server.tomcat.remote-ip-header=x-forwarded-for
server.tomcat.basedir=/tmp # base dir (usually not needed, defaults to tmp)
server.tomcat.background-processor-delay=30; # in seconds
server.tomcat.max-threads = 0 # number of threads in protocol handler
server.tomcat.uri-encoding = UTF-8 # character encoding to use for URL decoding

二、实践

2.1、未设置JVM参数的情况下

启动:com.payn.optimize.DemoApplication (pid 15452)
概述信息:

PID: 15452
主机: localhost
主类: com.payn.optimize.DemoApplication
参数: <无>

JVM: Java HotSpot(TM) 64-Bit Server VM (25.144-b01, mixed mode)
Java: 版本 1.8.0_144, 供应商 Oracle Corporation
Java Home 目录: F:\Development\java\jdk1.8.0_144\jre
JVM 标志: <无>

出现 OOME 时生成堆 dump: 禁用

JVM参数:

-javaagent:F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar=49955:F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\bin
-Dfile.encoding=UTF-8

系统参数:

PID=15452
awt.toolkit=sun.awt.windows.WToolkit
catalina.base=C:\Users\gravityZero\AppData\Local\Temp\tomcat.2624437999068219336.8080
catalina.home=C:\Users\gravityZero\AppData\Local\Temp\tomcat.2624437999068219336.8080
catalina.useNaming=false
file.encoding=UTF-8
file.encoding.pkg=sun.io
file.separator=\
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.awt.headless=true
java.awt.printerjob=sun.awt.windows.WPrinterJob
java.class.path=F:\Development\java\jdk1.8.0_144\jre\lib\charsets.jar;F:\Development\java\jdk1.8.0_144\jre\lib\deploy.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\access-bridge-64.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\cldrdata.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\dnsns.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\jaccess.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\jfxrt.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\localedata.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\nashorn.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunec.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunjce_provider.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunmscapi.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunpkcs11.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\zipfs.jar;F:\Development\java\jdk1.8.0_144\jre\lib\javaws.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jce.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jfr.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jfxswt.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jsse.jar;F:\Development\java\jdk1.8.0_144\jre\lib\management-agent.jar;F:\Development\java\jdk1.8.0_144\jre\lib\plugin.jar;F:\Development\java\jdk1.8.0_144\jre\lib\resources.jar;F:\Development\java\jdk1.8.0_144\jre\lib\rt.jar;E:\CODESPACE\PhoenixPlan\java-advance\jvm-optimize\target\classes;F:\Maven\maven_repository\org\springframework\boot\spring-boot-starter-web\2.1.0.RELEASE\spring-boot-starter-web-2.1.0.RELEASE.jar;F:\Maven\maven_repository\org\springframework\boot\spring-boot-starter\2.1.0.RELEASE\spring-boot-starter-2.1.0.RELEASE.jar;F:\Maven\maven_repository\org\springframework\boot\spring-boot\2.1.0.RELEASE\spring-boot-2.1.0.RELEASE.jar;F:\Maven\maven_repository\org\springframework\boot\spring-boot-autoconfigure\2.1.0.RELEASE\spring-boot-autoconfigure-2.1.0.RELEASE.jar;F:\Maven\maven_repository\org\springframework\boot\spring-boot-starter-logging\2.1.0.RELEASE\spring-boot-starter-logging-2.1.0.RELEASE.jar;F:\Maven\maven_repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;F:\Maven\maven_repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;F:\Maven\maven_repository\org\apache\logging\log4j\log4j-to-slf4j\2.11.1\log4j-to-slf4j-2.11.1.jar;F:\Maven\maven_repository\org\apache\logging\log4j\log4j-api\2.11.1\log4j-api-2.11.1.jar;F:\Maven\maven_repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;F:\Maven\maven_repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;F:\Maven\maven_repository\org\yaml\snakeyaml\1.23\snakeyaml-1.23.jar;F:\Maven\maven_repository\org\springframework\boot\spring-boot-starter-json\2.1.0.RELEASE\spring-boot-starter-json-2.1.0.RELEASE.jar;F:\Maven\maven_repository\com\fasterxml\jackson\core\jackson-databind\2.9.7\jackson-databind-2.9.7.jar;F:\Maven\maven_repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;F:\Maven\maven_repository\com\fasterxml\jackson\core\jackson-core\2.9.7\jackson-core-2.9.7.jar;F:\Maven\maven_repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.7\jackson-datatype-jdk8-2.9.7.jar;F:\Maven\maven_repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.7\jackson-datatype-jsr310-2.9.7.jar;F:\Maven\maven_repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.7\jackson-module-parameter-names-2.9.7.jar;F:\Maven\maven_repository\org\springframework\boot\spring-boot-starter-tomcat\2.1.0.RELEASE\spring-boot-starter-tomcat-2.1.0.RELEASE.jar;F:\Maven\maven_repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.12\tomcat-embed-core-9.0.12.jar;F:\Maven\maven_repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.12\tomcat-embed-el-9.0.12.jar;F:\Maven\maven_repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.12\tomcat-embed-websocket-9.0.12.jar;F:\Maven\maven_repository\org\hibernate\validator\hibernate-validator\6.0.13.Final\hibernate-validator-6.0.13.Final.jar;F:\Maven\maven_repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;F:\Maven\maven_repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;F:\Maven\maven_repository\com\fasterxml\classmate\1.4.0\classmate-1.4.0.jar;F:\Maven\maven_repository\org\springframework\spring-web\5.1.2.RELEASE\spring-web-5.1.2.RELEASE.jar;F:\Maven\maven_repository\org\springframework\spring-beans\5.1.2.RELEASE\spring-beans-5.1.2.RELEASE.jar;F:\Maven\maven_repository\org\springframework\spring-webmvc\5.1.2.RELEASE\spring-webmvc-5.1.2.RELEASE.jar;F:\Maven\maven_repository\org\springframework\spring-aop\5.1.2.RELEASE\spring-aop-5.1.2.RELEASE.jar;F:\Maven\maven_repository\org\springframework\spring-context\5.1.2.RELEASE\spring-context-5.1.2.RELEASE.jar;F:\Maven\maven_repository\org\springframework\spring-expression\5.1.2.RELEASE\spring-expression-5.1.2.RELEASE.jar;F:\Maven\maven_repository\org\springframework\spring-core\5.1.2.RELEASE\spring-core-5.1.2.RELEASE.jar;F:\Maven\maven_repository\org\springframework\spring-jcl\5.1.2.RELEASE\spring-jcl-5.1.2.RELEASE.jar;F:\Maven\maven_repository\org\apache\zookeeper\zookeeper\3.4.7\zookeeper-3.4.7.jar;F:\Maven\maven_repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;F:\Maven\maven_repository\org\slf4j\slf4j-log4j12\1.7.25\slf4j-log4j12-1.7.25.jar;F:\Maven\maven_repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;F:\Maven\maven_repository\jline\jline\0.9.94\jline-0.9.94.jar;F:\Maven\maven_repository\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;F:\Maven\maven_repository\com\github\sgroschupf\zkclient\0.1\zkclient-0.1.jar;F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar
java.class.version=52.0
java.endorsed.dirs=F:\Development\java\jdk1.8.0_144\jre\lib\endorsed
java.ext.dirs=F:\Development\java\jdk1.8.0_144\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
java.home=F:\Development\java\jdk1.8.0_144\jre
java.io.tmpdir=C:\Users\GRAVIT~1\AppData\Local\Temp\
java.library.path=F:\Development\java\jdk1.8.0_144\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;F:\Development\java\jdk1.8.0_144\bin;F:\Development\java\jdk1.8.0_144\jre\bin;F:\Maven\apache-maven-3.5.2\bin;F:\SOFTWARE\RabbitMq\erl9.3\bin;F:\SOFTWARE\mysql\mysql-5.7.27-winx64\bin;F:\SOFTWARE\SVN\VisualSVN Server\bin;E:\SOFTWARE\Subversion\bin;E:\SOFTWARE\SVN\VisualSVNServer\bin;E:\SOFTWARE\SVN\TortoiseSVN\bin;%GROOVY_HOME%\bin;C:\Users\gravityZero\AppData\Local\Microsoft\WindowsApps;;.
java.rmi.server.randomIDs=true
java.runtime.name=Java(TM) SE Runtime Environment
java.runtime.version=1.8.0_144-b01
java.specification.name=Java Platform API Specification
java.specification.vendor=Oracle Corporation
java.specification.version=1.8
java.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
java.version=1.8.0_144
java.vm.info=mixed mode
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
java.vm.specification.name=Java Virtual Machine Specification
java.vm.specification.vendor=Oracle Corporation
java.vm.specification.version=1.8
java.vm.vendor=Oracle Corporation
java.vm.version=25.144-b01
line.separator=\r\n
os.arch=amd64
os.name=Windows 10
os.version=10.0
path.separator=;
spring.beaninfo.ignore=true
sun.arch.data.model=64
sun.boot.class.path=F:\Development\java\jdk1.8.0_144\jre\lib\resources.jar;F:\Development\java\jdk1.8.0_144\jre\lib\rt.jar;F:\Development\java\jdk1.8.0_144\jre\lib\sunrsasign.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jsse.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jce.jar;F:\Development\java\jdk1.8.0_144\jre\lib\charsets.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jfr.jar;F:\Development\java\jdk1.8.0_144\jre\classes
sun.boot.library.path=F:\Development\java\jdk1.8.0_144\jre\bin
sun.cpu.endian=little
sun.cpu.isalist=amd64
sun.desktop=windows
sun.io.unicode.encoding=UnicodeLittle
sun.java.command=com.payn.optimize.DemoApplication
sun.java.launcher=SUN_STANDARD
sun.jnu.encoding=GBK
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
sun.os.patch.level=
user.country=CN
user.dir=E:\CODESPACE\PhoenixPlan\java-advance
user.home=C:\Users\gravityZero
user.language=zh
user.name=桥下之民
user.script=
user.timezone=Asia/Shanghai
user.variant=

堆栈信息:

最大堆内存分配的4G。

2.2、设置JVM参数

1、方式一:使用IDEA配置VM参数

-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC


JVM参数:

-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=128m
-Xms1024m
-Xmx1024m
-Xmn256m
-Xss256k
-XX:SurvivorRatio=8
-XX:+UseConcMarkSweepGC
-XX:TieredStopAtLevel=1
-Xverify:none
-Dspring.output.ansi.enabled=always
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=50910
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=localhost
-Dspring.liveBeansView.mbeanDomain
-Dspring.application.admin.enabled=true
-javaagent:F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar=50911:F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\bin
-Dfile.encoding=UTF-8

2、方式二:适用于在项目部署后,在启动的时候,采用脚本或者命令行运行的时候设置。
打包项目:

执行:

$ java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC jvm-optimize-1.0-SNAPSHOT.jar

$ java -jar 
-XX:MetaspaceSize=128m 
-XX:MaxMetaspaceSize=128m 
-Xms1024m 
-Xmx1024m 
-Xmn256m 
-Xss256k 
-XX:SurvivorRatio=8 
-XX:+UseConcMarkSweepGC 
jvm-optimize-1.0-SNAPSHOT.jar

评论

暂无

添加新评论