1、测试工具
1.1、Apache JMeter 5.1.1
Apache JMeter是Apache组织开发的基于Java的压力测试工具。
1.2、Java VisualVM 1.8
VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。本文主要介绍如何使用 VisualVM 进行性能分析及调优。
1.3、Spring cloud Hystrix-Dashboard
Hystrix Dashboard是Hystrix的仪表盘组件,主要用来实时监控Hystrix的各项指标信息,通过界面反馈的信息可以快速发现系统中存在的问题。
2、测试环境
2.1、Spring cloud 版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
2.2、Java 版本
2.3、maven 版本
2.4、mysql 版本
2.5、docker 版本
3、参数调整
3.1、Spring cloud zuul yml 参数调整(具体值参数值需要参考实际环境)
spring:
application:
name: zuul
profiles:
active: dev
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
username: root
password: 1156543
jpa:
hibernate:
ddl-auto: create
show-sql: true
redis:
host: localhost
port: 6379
password: 1654
eureka:
client:
serviceUrl:
defaultZone: http://eureka:8761/eureka/
fetch-registry: true
register-with-eureka: true
instance:
prefer-ip-address: true
server:
tomcat:
max-threads: 1000
min-spare-threads: 64
max-connections: 2000
zuul:
host:
connect-timeout-millis: 300000
socket-timeout-millis: 300000
sensitive-headers:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 6000
management:
endpoints:
web:
exposure:
include: "*"
zuul.host.maxTotalConnections: 2000
zuul.host.maxPerRouteConnections: 20
zuul.semaphore.max-semaphores: 2000
4、测试结果
Spring cloud zuul 使用 Hystrix 默认执行方式 SEMAPHORE(信号量)
4.1、并发1000测试
tomcat设置 max-threads: 1000,同时并发请求1000次,zuul的线程数量接近1000,全部返回成功,没有出现异常
4.2、并发2000测试
同时并发请求2000次,有24.95%的请求被拒绝了。