当前位置: 首页 > news >正文

【深入解析spring cloud gateway】12 gateway参数调优与分析

本节主要对网关主要的一些参数做一些解释说明,并用压测工具测试一下网关的接口,通过压测来验证参数配置是否合理

一、连接池参数

参数示例

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: fixed

Http超时配置

全局超时配置

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,那么就是最小为4
  • DEFAULT_IO_SELECT_COUNT ,IO线程数,默认为-1,当它为-1时,其实就等于IO线程数

如果想手动修改线程参数值,可以这么做

  • 添加环境变量,reactor.netty.ioWorkerCount=xx,reactor.netty.ioSelectCount=xx
  • 或者动设置属性值,如下代码
@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核CPU,16G内存,三个服务,eureka-server,euerka-client,gateway

环境准备:JeMeter+JProfile

  • 下载JProfile,安装好
  • 下载JMeter,安装好
  • idea安装jprofile插件
    在这里插入图片描述

测试代码编写

hello-service定义一个接口,模拟耗时200ms

@Controller
@Slf4j
public class BusinessController {@RequestMapping(value = "/mock/business", method = RequestMethod.POST)@ResponseBodypublic Map<String, String> modifyRequest(@RequestBody Map<String, 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% Line:90% ~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)的。
    上图中,可以看到,此时运行的线程数为4,IO处理线程为4
    内存占用情况,可以在这里看到
    在这里插入图片描述

————————————————
用JMeter时遇到了如下问题:
JMeter压测时Address Already in use:connect错误解决
在windows 环境下使用jmeter 进行压测的过程中,通常会遇到这样的错误“JMeter Address Already in use:connect”, 查阅了不少资料,发现这是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:win+r 在cmd中,用regedit命令打开注册表
step2:在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 目录下,
(1)右键Parameters 新建DWORD,名字为MaxUserPort,输入数值65534(十进制)
(2)再次右键 Parameters 新建DWORD,名字为TCPTimedWaitDelay,输入数值30(十进制)表示30秒回收端口
在这里插入图片描述

step3:重启计算机。
问题解决

相关文章:

【深入解析spring cloud gateway】12 gateway参数调优与分析

本节主要对网关主要的一些参数做一些解释说明&#xff0c;并用压测工具测试一下网关的接口&#xff0c;通过压测来验证参数配置是否合理 一、连接池参数 参数示例 spring:application:name: gatewaycloud:gateway:# http连接设置httpclient:# 全局的响应超时时间&#xff0c…...

Java继承,父类没有无参构造方法时,子类必须要显式调用父类的构造方法

在Java中&#xff0c;如果一个类没有定义任何构造函数&#xff0c;那么编译器会默认为这个类提供一个无参的构造函数。 这个隐式的构造函数在继承的时候&#xff0c;子类会在自己的构造方法里面默认的调用这个构造函数。 但是&#xff0c;如果我们在父类中定义了一个有参构造…...

Ubuntu 20.04使用Livox Mid-360

参考文章&#xff1a; Ubuntu 20.04使用Livox mid 360 测试 FAST_LIO-CSDN博客 一&#xff1a;Livox mid 360驱动安装与测试 前言&#xff1a; Livox mid360需要使用Livox-SDK2&#xff0c;而非Livox-SDK&#xff0c;以及对应的livox_ros_driver2 。并需要修改FAST_LIO中部…...

C语言之冒泡排序

其实排序有很多的方法&#xff0c;比如&#xff1a;冒泡排序&#xff0c;插入排序&#xff0c;快速排序&#xff0c;归并排序&#xff0c;选择排序等。今天来讲一下最简单的排序&#xff1a;冒泡排序。这种排序的方法效率极其低下。 假设有一个整型数组&#xff1a; int arr[…...

在Linux上安装NVM(Node Version Manager)

在Linux系统上&#xff0c;使用NVM&#xff08;Node Version Manager&#xff09;是管理和切换Node.js版本的一种便捷方式。以下是在Linux上安装NVM的步骤&#xff1a; 1. 下载并安装NVM 使用curl或wget下载并运行NVM的安装脚本。选择一种方式执行以下命令之一&#xff1a; …...

常用两种Linux命令生成器

在Linux中&#xff0c;可以使用多种命令来生成随机密码。以下是其中两种常用的命令&#xff1a; 1.pwgen&#xff1a;这个命令可以生成随机、无意义的但容易发音的密码。生成的密码可以只包含小写字母、大小写混合或数字。大写字母和数字会以一种便于记忆的方式放置&#xff0…...

【OAuth2】授权框架的四种授权方式详解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《OAuth 2》。&#x1f3af;&#x1f3af; &#x1…...

AI数字人不间断直播是什么?数字人直播带货如何搭建?

随着电商行业的崛起&#xff0c;数字人直播成为了最为热门的直播方式之一。数字人直播利用AI技术创建出的数字人进行直播&#xff0c;给观众带来了全新的视觉体验。 一、AI数字人无限播&#xff08;数字人SaaS系统VX&#xff1a;zhibo175&#xff09;是什么&#xff1f; AI数字…...

真菌基因组研究高分策略(二):比较基因组揭示寄主外生菌根真菌基因组的动态进化

在表征外生菌根&#xff08;ECM&#xff09;真菌的“共生工具包”方面的研究已经取得了重大进展&#xff0c;但宿主特异性如何被编码到ECM真菌基因组中仍知之甚少。2021年发表于《New Phytologist》期刊的文章对ECM真菌宿主特异性和通用性进行了比较基因组分析&#xff0c;重点…...

uni-app之HelloWorld实现

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…...

CVE-2023-49898 Apache incubator-streampark 远程命令执行漏洞

项目介绍 Apache Flink 和 Apache Spark 被广泛用作下一代大数据流计算引擎。基于大量优秀经验结合最佳实践&#xff0c;我们将任务部署和运行时参数提取到配置文件中。这样&#xff0c;带有开箱即用连接器的易于使用的 RuntimeContext 将带来更轻松、更高效的任务开发体验。它…...

即将来临的2024年,汽车战场再起波澜?

我们来简要概况一下11月主流车企的销量表现&#xff1a; 根据数据显示&#xff0c;11月吉利集团总销量29.32万辆&#xff0c;同比增长28%。这在当月国内主流车企中综合实力凌厉&#xff0c;可谓表现得体。而与吉利直接竞争的比亚迪&#xff0c;尽管数据未公布&#xff0c;但我们…...

Python 爬虫之下载视频(二)

爬取某Y的视频链接和标题 文章目录 爬取某Y的视频链接和标题前言一、基本思路二、程序解析阶段三、程序处理阶段总结 前言 这篇内容就简单给大家写个如何从网页上爬取某B主 主页 页面上所有的视频链接和视频标题。 这篇是基础好好看&#xff0c;下篇会根据这篇的结果做一个批…...

智能优化算法应用:基于原子轨道搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于原子轨道搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于原子轨道搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.原子轨道搜索算法4.实验参数设定…...

[机器人-2]:开源MIT Min cheetah机械狗设计(二):机械结构设计

目录 1、四肢朝向的选择 2、电机布局形式的选择 3、电机的选型及测试&#xff08;非常重要&#xff09; 4、结构优化 5、尺寸效应 6、其他 1、四肢朝向的选择 机械狗的结构设计&#xff0c;第一个摆在我们面前的就说四肢的朝向问题&#xff0c;如下图&#xff0c;我们是…...

用友U8+CRM help2 任意文件读取漏洞复现

0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件&#xff0c;旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 help2接口处存在任意文件读取漏洞&#xff0c;攻击者通过漏洞可以获取到服…...

freeRTOS实时操作系统学习笔记

温馨提示&#xff1a;点击图片查看大图更清晰 —————————————————————————————↑↑↑上方资源下载后可获取xmind原文件。 1、freeRTOS移植和配置脑图 2、内核源码学习...

解决虚拟机卡顿、卡死、待机后不动的情况(真实有效

本人环境&#xff1a; VM workstation 17.5 ubuntu 22.04 虚拟机配置&#xff1a;4核 4g issue&#xff1a; 出现开机卡死不动运行一段时间&#xff0c;可能半小时不到&#xff0c;就页面卡死不动经常需要关机重启才解决&#xff0c;可能没有解决 1.配置虚拟化引擎 这一步我称…...

【MybatisPlus快速入门】(3)SpringBoot整合MybatisPlus 之 Lombok插件安装及MybatisPlus分页代码示例

目录 1.Lombok1.1 步骤1:添加lombok依赖 2.2 步骤2:安装Lombok的插件1.3 步骤3:模型类上添加注解2 分页功能2.1 步骤1:调用方法传入参数获取返回值2.2步骤2:设置分页拦截器2.3 步骤3:运行测试程序 之前我们已学习MyBatisPlus在代码示例与MyBatisPlus的简介&#xff0c;在这一节…...

SpaceDesk如何连接平板/PC(生产力副屏)

1、下载安装 分为安卓端和PC端&#xff0c;两个设备都需要安装对应的软件。 SpaceDesk官网 https://link.zhihu.com/?targethttp%3A//spacedesk.net/ 需要魔法上网。安装过程比较简单&#xff0c;无脑下一步即可。 我已经把安装包准备好了&#xff0c;如果不想自己找&#…...

【Claude基础】08.子代理系统:分身术与并行执行

文章目录[toc]0\. 【Claude基础】全部目录1\. 子代理设计哲学1.1 单一上下文窗口的局限1.2 核心价值1.3 子代理 vs 多会话 vs 多实例2\. 内置代理详解2.1 general-purpose — 通用多步任务2.2 Explore — 快速只读代码库分析2.3 Plan — 研究型实施规划2.4 claude-code-guide —…...

AI应用统一管理:aiclublight轻量级启动器部署与配置指南

1. 项目概述与核心价值最近在折腾一些AI相关的本地化应用&#xff0c;发现了一个挺有意思的项目&#xff0c;叫aiclublight。这名字听起来有点“俱乐部之光”的意思&#xff0c;但它的核心其实是一个轻量级的AI应用启动器。简单来说&#xff0c;它就像是一个为你电脑上各种AI模…...

NGA论坛优化摸鱼体验:终极指南让你的浏览效率提升300%[特殊字符]

NGA论坛优化摸鱼体验&#xff1a;终极指南让你的浏览效率提升300%&#x1f525; 【免费下载链接】NGA-BBS-Script NGA论坛增强脚本&#xff0c;给你完全不一样的浏览体验 项目地址: https://gitcode.com/gh_mirrors/ng/NGA-BBS-Script 你是否厌倦了在NGA论坛浏览时被杂乱…...

Taotoken用量看板如何帮助团队精细化管控大模型成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken用量看板如何帮助团队精细化管控大模型成本 对于团队技术负责人或项目管理者而言&#xff0c;大模型API的调用成本正成为一…...

为什么你的电脑风扇总是“抽风“?3个简单步骤彻底解决Windows风扇控制难题

为什么你的电脑风扇总是"抽风"&#xff1f;3个简单步骤彻底解决Windows风扇控制难题 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://git…...

STM32CubeMX实战:5分钟搞定MAX31865 PT100测温,从SPI配置到温度读取全流程

STM32CubeMX实战&#xff1a;5分钟搞定MAX31865 PT100测温&#xff0c;从SPI配置到温度读取全流程 在工业测温领域&#xff0c;PT100凭借其优异的线性度和稳定性成为温度测量的黄金标准。而MAX31865作为专为RTD传感器设计的信号调理器&#xff0c;极大简化了前端电路设计。本文…...

李辉《曾国藩日记》笔记:不要依附靠山,也不要做别人的靠山!

李辉《曾国藩日记》笔记&#xff1a;不要依附靠山&#xff0c;也不要做别人的靠山&#xff01;原文&#xff1a;同治三年十二月廿三日早饭后清理文件。围棋一局。见客&#xff0c;坐见者四次&#xff0c;立见者一次。阅《说文》五叶。核科房批稿。中饭后再核批稿。写挂屏三幅、…...

终极指南:如何用免费软件完全掌控Windows电脑风扇噪音与散热平衡

终极指南&#xff1a;如何用免费软件完全掌控Windows电脑风扇噪音与散热平衡 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_T…...

向量寄存器文件优化:Register Dispersion技术解析

1. 向量寄存器文件的技术挑战与优化背景在处理器架构设计中&#xff0c;向量寄存器文件&#xff08;Vector Register File, VRF&#xff09;作为向量处理单元&#xff08;VPU&#xff09;的核心组件&#xff0c;承担着存储和管理向量数据的关键任务。传统VRF设计通常采用固定数…...

基于Agen项目构建个人AI代理:从LLM原理到邮件处理实战

1. 项目概述&#xff1a;从“Agen”看个人化AI代理的构建思路最近在GitHub上看到一个名为“Agen”的项目&#xff0c;作者是Anjuan555。这个项目名本身就很值得玩味——“Agen”&#xff0c;很容易让人联想到“Agent”&#xff08;代理&#xff09;&#xff0c;但又少了一个“t…...