Springcloud的性能问题
Springcloud 原始的配置,性能是很低的,大家可以使用Jmeter测试一下,QPS不会到50。要做到高并发,需要做不少的配置优化,主要的配置优化有以下几点:
- Feign 配置优化
- hystrix配置 优化
- ribbon 优化
- Servlet 容器 优化
- Zuul配置 优化
Servlet 容器 优化
默认情况下,Spring Boot 使用 Tomcat 来作为内嵌的 Servlet 容器,可以将 Web 服务器切换到 Undertow 来提高应用性能,Undertow 是红帽公司开发的一款基于 NIO 的高性能 Web 嵌入式
Zuul使用的内置容器默认是Tomcat,可以将其换成undertow,可以显著减少线程的数量,替换方式即在pom中添加以下内容:
第一步,移除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>
第二步,增加Untertow 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
第三步,Undertow 的属性配置
server:
undertow:
io-threads: 16
worker-threads: 256
buffer-size: 1024
buffers-per-region: 1024
direct-buffers: true
server.undertow.io-threads: 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程,不要设置过大,如果过大,启动项目会报错:打开文件数过多