SpringBoot的性能优化问题

  1. JVM的参数调优
  2. 扫包优化(比较重要)
  3. 默认Tomcat容器修改Undertow,吞吐量Undertow(吞吐量8000)比Tomcat(吞吐量5000)要好

扫包优化

  • 扫包优化不属于运行优化,而是属于启动优化
  • @SpringBootApplication注解等同于@ComponentScan+@EnableAutoConfiguration+@Configuration
  • @ComponentScan默认会扫描同级包以及其下的子包;我们会默认遍历包下面的所有的类,这时候就会影响到启动的项目的时间(也就是说默认扫描的类太多了,可能会扫到没有必要扫的包增加了其要扫描的类,速度慢

原则上讲就是:
(1)去掉@SpringBootApplication
(2)自己加上@ComponentScan+@EnableAutoConfiguration+@Configuration
(3)自己在@ComponentScan上加上要扫描的范围,

  • 如@ComponentScan(basePackages={“com.xiyou.controller”, “com.xiyou.service”})

JVM参数调优

  • 影响的是整体的运行效果,而不是启动效果
  • 吞吐量指的是每秒的响应量,默认情况下每秒完成的请求数量
  • 调优策略:
    (1)初始化堆内存(-Xms)和最大的堆内存(-Xmx)一定要相同,避免频繁的垃圾回收
    (2)尽量减少GC的回收次数
    (3)尽量在新生代回收,别在老年代回收,减少Full GC等
  • SpringBoot如何配置参数调优?
    (1)内部启动参数调优(直接在启动的时候,通过设置JVM的参数进行设置,在idea中进行设置)
  • springboot 性能优化 springboot undertow 优化_spring

  • JVM默认4个G
  • 也不是说-Xmx越大越好,-Xmx越大,程序虚拟机栈空间越少,增加-Xmx增加了堆的大小,减少了栈内存空间。
  • 对于高并发,创建对象不多的项目,可以降低Xmx的配置, 结合Xms 设定堆范围 -Xms256m -Xmx512(对象存储在堆中)
  • 对于低并发,创建对象多的项目,(数据处理型的) 可以适当提高,Xmx(对象存储在堆中)

(2)外部启动参数调优(通过命令传递)

  • 工程先打包
  • java -jar 运行程序的时候,加入设置JVM命令,如:
    java -server -Xms32m -Xmx32m -jar XXXX.jar
  • 可以通过jconsole进行查看JVM的内存情况

将Servlet容器默认的Tomcat服务器改为Undertow

  • 默认情况下,Spring Boot使用Tomcat容器作为内嵌的Servlet容器
  • 可以将Web容器切换到Undertow来提高应用的性能,Undertow是一个采用Java开发的灵活的高性能Web服务器,提供包括阻塞和基于NIO的非阻塞机制,是红帽的开源产品。
  • 要想改为Undertow,首先移除Tomcat容器:
<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-tomcat</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

利用< exclusion>进行移除,再添加undertow

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>