外贸人常去的网站,网站左侧分类菜单怎么做,如何创建网站的快捷方式,唐山网站建设策划方案本节主要对网关主要的一些参数做一些解释说明#xff0c;并用压测工具测试一下网关的接口#xff0c;通过压测来验证参数配置是否合理
一、连接池参数
参数示例
spring:application:name: gatewaycloud:gateway:# http连接设置httpclient:# 全局的响应超时时间#xff0c…本节主要对网关主要的一些参数做一些解释说明并用压测工具测试一下网关的接口通过压测来验证参数配置是否合理
一、连接池参数
参数示例
spring:application:name: gatewaycloud:gateway:# http连接设置httpclient:# 全局的响应超时时间网络链接后后端服务多久不返回网关就报错 The response timeout. PT10S代表10秒的意思response-timeout: PT30S# 全局的TCP连接超时时间默认时间是45秒修改为5秒connect-timeout: 5000# 链接池配置pool:# 最大连接数max-connections: 10000# 获取连接的超时时间单位毫秒acquire-timeout: 1000# channel空闲时最大的存活时间如果为空没有最大空闲时间max-idle-time: 120000# channel存在的最长时间如果为null则没有最大生命时间限制
# max-life-time: 10# 在后台进行清除channel的时间间隔默认情况下为0,即不进行定期清除eviction-interval: 180000# 设置固定链接池type: fixedHttp超时配置
全局超时配置
spring:cloud:gateway:# http连接设置httpclient:# 全局的响应超时时间网络链接后后端服务多久不返回网关就报错 The response timeout. PT10S代表10秒的意思response-timeout: PT10S# 全局的TCP连接超时时间默认时间是45秒修改为5秒connect-timeout: 5000如果是想针对单个路由配置超时可以配置在路由上
spring:cloud:gateway:routes:- id: requestratelimiter_routeuri: http://localhost:3000/predicates:- Path/normal/**metadata:response-timeout: 7000connect-timeout: 2000连接池类型
spring.cloud.gateway.httpclient.pool.type该参数一共有三种类型
ELASTIC弹性链接池连接数上限为Integer.MAX默认值就是这个类型FIXED: 固定连接池最大连接数采用spring.cloud.gateway.httpclient.pool.max-connections的配置DISABLED不使用任何连接池
其余参数见注释说明
二、线程池参数
Gateway底层是使用的netty来处理网络请求。如果你了解过netty那你应该知道netty的线程模型是使用了两个线程池bossGroup和workGroup。分别用于处理IO的连接请求以及业务。 查看一下Gateway源码可以看到
public interface LoopResources extends Disposable {int DEFAULT_IO_WORKER_COUNT Integer.parseInt(System.getProperty(reactor.netty.ioWorkerCount, Math.max(Runtime.getRuntime().availableProcessors(), 4)));int DEFAULT_IO_SELECT_COUNT Integer.parseInt(System.getProperty(reactor.netty.ioSelectCount, -1));//省略大量代码}DEFAULT_IO_WORKER_COUNT工作线程数默认值是CPU核心数如果核心数少于4那么就是最小为4DEFAULT_IO_SELECT_COUNT IO线程数默认为-1当它为-1时其实就等于IO线程数
如果想手动修改线程参数值可以这么做
添加环境变量reactor.netty.ioWorkerCountxx,reactor.netty.ioSelectCountxx或者动设置属性值如下代码
SpringBootApplication
public class GatewayDemoApplication {public static void main(String[] args) {System.setProperty(ReactorNetty.IO_SELECT_COUNT,8);System.setProperty(ReactorNetty.IO_WORKER_COUNT,8);SpringApplication.run(GatewayDemoApplication.class, args);}
}三、压力测试
本机环境 4核CPU16G内存三个服务eureka-servereuerka-clientgateway
环境准备JeMeterJProfile
下载JProfile安装好下载JMeter安装好idea安装jprofile插件
测试代码编写
hello-service定义一个接口模拟耗时200ms
Controller
Slf4j
public class BusinessController {RequestMapping(value /mock/business, method RequestMethod.POST)ResponseBodypublic MapString, String modifyRequest(RequestBody MapString, String map) {try {Thread.sleep(200L);} catch (InterruptedException e) {throw new RuntimeException(e);}return map;}
}启动微服务和eureka注册中心启动gateway网关点击那个蓝色的小图标 然后就可以启好网关并且通过JProfile看到线和、CPU、内存的运行状态了 等会我们通过JMeter再实时观察一下各参数的情况方便验证我们的网关参数 JMeter配置 定义一个线程组 1000个线程10秒内启动循环100次 定义一个http取样器同时设置好请求如下 由于是post请求请求数据为json所以添加一个头信息管理器 定义请求结果的报告
JMeter结果 JMeter中的聚合报告中主要有十几项的参数,参数如下
1、Label每个请求的名称比如HTTP请求等2、#Samples:表示这次测试中一共发出了多少个请求如果模拟10个用户每个用户迭代10次那么这里显示100【我的是用户有100只迭代一次因此也是100】3、Average平均响应时间——默认情况下是单个 Request 的平均响应时间当使用了 Transaction Controller 时也可以以Transaction 为单位显示平均响应时间4、Median中位数也就是 50 用户的响应时间5、90% Line ~ 99% Line90 ~99%用户的响应时间6、Min最小响应时间7、Maximum最大响应时间8、Error%本次测试中出现的错误率即 错误的请求的数量/请求的总数9、Throughput吞吐量——默认情况下表示每秒完成的请求数Request per Second当使用了 Transaction 10、Received KB/src每秒从服务器端接收到的数据量11、Sent KB/src每秒从客户端发送的请求的数量。 可以看到请求结果中是有些报错的 通过JMeter查看一下线程情况 可以看到gateway的线程数并没有因为请求数增加而增加线程一般启起来都是固定的。基于reactor响应式编程模型和netty框架的支持一个线程是可以同时处理多个连接channel的。 上图中可以看到此时运行的线程数为4IO处理线程为4 内存占用情况可以在这里看到
———————————————— 用JMeter时遇到了如下问题 JMeter压测时Address Already in useconnect错误解决 在windows 环境下使用jmeter 进行压测的过程中通常会遇到这样的错误“JMeter Address Already in useconnect” 查阅了不少资料发现这是windows本身提供的端口访问机制的问题。 Windows提供给TCP/IP连接的端口为1024-5000并且要4分钟来循环回收它们这就导致了我们在短时间内发起大量请求的时候将端口占满了。
解决方案一 Jmeter里的http sample勾选了keep alive导致会话一直保持而windows本身的端口有限导致端口被占用完后无法分配新的端口因此会产生java.net.BindException: Address already in use: connect 报错。 解决方法HTTP SAMPLE 不勾选KeepAlive即可如下图所示解决方案二 step1:winr 在cmd中用regedit命令打开注册表 step2:在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 目录下 1右键Parameters 新建DWORD名字为MaxUserPort,输入数值65534十进制 2再次右键 Parameters 新建DWORD名字为TCPTimedWaitDelay,输入数值30十进制表示30秒回收端口
step3:重启计算机。 问题解决