今天博主将为大家分享SpringBoot项目优化配置!不喜勿喷,如有异议欢迎讨论!
以下所写内容均与以前的文章有联系可以前往博文查看,陈永佳的博客
之前的一系列文章讲解了Maven安装以及配置和STS(eclipse)配置Maven,如有不会的同学请前往学习,如果喜欢给个点赞关注哦,谢谢支持!
作为一名工程师,项目调优这事,是必须得熟练掌握的事情。
在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。在这边有一篇比较好的文章,推荐给大家!
https://zhuanlan.zhihu.com/p/31803182
我的yml文件大家看tomcat就可以了
server:
#项目端口号
port: 8066
servlet:
context-path: /Jmccms
tomcat:# 在这里配置tomcat的参数达到优化效果
#最大连接数
max-connections: 200
#post提交数据最大大小,设置为0不限制
max-http-post-size: 0
#最大线程数
max-threads: 300
min-spare-threads: 0
#编码方式
uri-encoding: UTF-8
eureka:
instance:
# 每隔10s发送一次心跳
lease-renewal-interval-in-seconds: 10
# 告知服务端30秒还未收到心跳的话,就将该服务移除列表
lease-expiration-duration-in-seconds: 30
client:
serviceUrl:
#eureka注册中心地址固定就这样写
defaultZone: http://localhost:8888/eureka/
logging:
pattern:
console: "%d - %msg%n"
#path: D:\Logback-Test\ #日志输出到指定文件夹下默认名为spring.log
file: D:\Logback-Test\wordimg.log #日志输出到指定文件
#level: debug #指定级别
level: #指定输出某个类的日志
com.cnooc.wordimg.LoggerTest2: debug
spring:
application:
#服务名称,写组长名称谢谢!!!
name: serve-jmccms
datasource:
driver-class-name: com.mysql.jdbc.Driver
#数据库意思是:机构权限文件
url: jdbc:mysql://127.0.0.1:3306/jmccms?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&useSSL=false
username: root
password: root
dbcp2: # 进行数据库连接池的配置
min-idle: 5 # 数据库连接池的最小维持连接数
initial-size: 5 # 初始化提供的连接数
max-total: 5 # 最大的连接数
max-wait-millis: 200 # 等待连接获取的最大超时时间
# SpringDateJpa 配置自动建表:updata:没有表新建,有表更新操作,控制台显示建表语句
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect #不加这句则默认为myisam引擎
##运行时输出jpa执行的sql语句
show-sql: true
## spring-boot-starter-data-jpa自动映射创建表动作 配置: 有表更新,无表创建
hibernate:
ddl-auto: update
#集中解决各种编码问题
banner:
charset: UTF-8
http:
encoding:
charset: UTF-8
enabled: true
force: true
messages:
encoding: UTF-8
# spring mvc 视图解析器
mvc:
view:
prefix: /
suffix: .html
# 时间格式化
jackson:
date-format: yyyy-MM-dd HH:mm:ss
# 时区设置
time-zone: GMT+8
# security:
# oauth2:
# resource:
# ####从认证授权中心上验证token
# tokenInfoUri: http://localhost:3011/chenyongjia-oauth/oauth/check_token
# preferTokenInfo: true
# client:
# accessTokenUri: http://localhost:3011/chenyongjia-oauth/oauth/token
# userAuthorizationUri: http://localhost:3011/chenyongjia-oauth/oauth/authorize
# client-id: client_1
# client-secret: 123456
使用application.yml配置文件有一些参数无法设置,也可以创建一个类文件来配置,如下:(记得引入tomcat的maven哦)
package com.qipai.springbean;
import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.boot.context.embedded.EmbeddedServletContainer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.stereotype.Component;
/**
* Created by weiqingming on 2017/12/7.
*/
@Component
public class TomcatConfig extends TomcatEmbeddedServletContainerFactory
{
public EmbeddedServletContainer getEmbeddedServletContainer(ServletContextInitializer... initializers)
{
//设置端口
this.setPort(8081);
return super.getEmbeddedServletContainer(initializers);
}
protected void customizeConnector(Connector connector)
{
super.customizeConnector(connector);
Http11NioProtocol protocol = (Http11NioProtocol)connector.getProtocolHandler();
//设置最大连接数
protocol.setMaxConnections(200);
//设置最大线程数
protocol.setMaxThreads(300);
//连接超时时间
protocol.setConnectionTimeout(10000);
}
}
关于Jvm调优Oracle官网有一份指导说明:https://docs.oracle.com/middleware/11119/wls/PERFM/jvm_tuning.htm#i1146060
一.设置下Jvm参数
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=128m
-Xms1024m -Xmx1024m -Xmn256m
-Xss256k -XX:SurvivorRatio=8
-XX:+UseConcMarkSweepGC
配置方式:
如果你用的是IDEA等开发工具,来启动运行项目,那么要调试JDK就方便太多了。
首先打开idea,按照截图操作:(当然这里要注意你要先选择你要设置jvm参数的application)
好了现在打开如下界面选择你要设置的springboot的application,添加jvm的vm配置。(这里自行百度设置或者按照经验来即可)
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=128m
-Xms1024m
-Xmx1024m
-Xmn256m
-Xss256k
-XX:SurvivorRatio=8
-XX:+UseConcMarkSweepGC
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2l5amw1a-1571643735067)(B5DB66EB21E3495694C11DABBF1A5B88)]
关于这些设置的JVM参数是什么意思,请参考第二步中的oracle官方给出的调优文档。
-XX:MetaspaceSize=128m (元空间默认大小)
-XX:MaxMetaspaceSize=128m (元空间最大大小)
-Xms1024m (堆最大大小)
-Xmx1024m (堆默认大小)
-Xmn256m (新生代大小)
-Xss256k (棧最大深度大小)
-XX:SurvivorRatio=8 (新生代分区比例 8:2)
-XX:+UseConcMarkSweepGC (指定使用的垃圾收集器,这里使用CMS收集器)
-XX:+PrintGCDetails (打印详细的GC日志)
要注意:
JDK8之后把-XX:PermSize 和 -XX:MaxPermGen移除了,取而代之的是
-XX:MetaspaceSize=128m (元空间默认大小)
-XX:MaxMetaspaceSize=128m (元空间最大大小)
JDK 8开始把类的元数据放到本地化的堆内存(native heap)中,这一块区域就叫Metaspace,中文名叫元空间。
使用本地化的内存有什么好处呢?最直接的表现就是java.lang.OutOfMemoryError: PermGen 空间问题将不复存在,因为默认的类的元数据分配只受本地内存大小的限制,也就是说本地内存剩余多少,理论上Metaspace就可以有多大(貌似容量还与操作系统的虚拟内存有关?这里不太清楚),这解决了空间不足的问题。
不过,让Metaspace变得无限大显然是不现实的,因此我们也要限制Metaspace的大小:使用-XX:MaxMetaspaceSize参数来指定Metaspace区域的大小。JVM默认在运行时根据需要动态地设置MaxMetaspaceSize的大小。
到这里SpringBoot项目优化配置!分享完毕,各位小伙伴快去试试吧!
更多参考精彩博文请看这里:《陈永佳的博客》
喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!