如何在压测过程中进行调优
mhr18 2024-12-07 22:20 34 浏览 0 评论
性能测试是产品开发和项目实施过程中非常重要的一项工作,通过性能测试一方面保证产品的功能和性能满足业务需求,项目实施过程中的性能测试更多是基于实际业务场景和需求对产品以及服务器、部署环境等进行调优,提高应用效果同时减少资源浪费。
在对产品测试过程中,要根据测试内容和结果对平台、环境等不断进行优化,最大程度释放相关资源的性能,充分满足实际业务使用的需求。而在测试过程中,性能的效果往往需要产品、服务器、数据库、测试工具等多个层面综合的结果,需要从不同的角度进行考虑和优化。
总体说明
对于产品的性能测试,不同产品、不同内容的测试方案和需求也是不一样的,在实际项目中需要根据使用情况进行测试。在数通的产品体系中,核心产品包括MDM基础数据平台、DAP数据分析平台、ESB总线平台、IDM身份管理平台等,每个平台在测试时需要制定不同的方案和计划。
1.总体架构
数通的产品体系包括了:DAP数据分析平台、MDM基础数据平台、IDM身份管理平台、ESB总线平台和UMC云管理平台等:
1.DAP数据分析平台:以数仓体系建设和数据可视化分析为基础,实现从源头系统的数据采集、加工、汇总、治理,构建数仓体系和指标体系,对数仓数据进行可视化分析和算法预测,并建立数据资产体系进行数据共享和管控;
2.MDM基础数据平台:对多系统共享的主数据进行集中治理,通过主数据建模、配置实现全生命周期的主数据管理,保证主数据的完整性、准确性和一致性,实现全局唯一和共享;
3.IDM身份管理平台:基于5A(统一用户、统一认证、统一权限、统一审计、统一应用管控)实现统一身份管控,保证异构系统用户的一致性,从而完成跨系统的统一认证、统一权限等;
4.ESB总线平台:包括数据总线和服务总线,数据总线主要支持DAP数据分析平台进行数据抽取、加工、转换、汇总,实现数仓数据构建;服务总线实现API治理体系建设,通过注册各个异构系统的服务接口,通过接口配置、代理、API网关的方式进行对外提供,从而实现接口的统一管理和安全管控;
5.UMC云管理平台:基于DevOps、云原生的k8s集群管理平台,主要满足k8s部署搭建以及各产品的容器化部署,支持多租户、容器化、动态扩容等管理机制,实现敏捷、快速进行产品的容器化管理与维护。
2.测试方案
平台的性能测试根据测试内容和场景的不同,会采用不同的工具进行测试,一般情况下,都是采用Jmeter进行性能测试,通过Jmeter可以进行高并发和用户量的测试,如IDM统一认证的压力测试、ESB代理接口或API网关的性能压力测试等。
除了基于Jmeter进行性能压测测试外,通过ESB总线平台也能进行测试,如针对MDM平台同步接口进行数据量测试,可以通过ESB开发同步流程进行大批量数据测试,已验证接口性能。
3.优化策略
在压测过程中,对压测结果影响比较大的因素主要是平台、服务器、环境、数据库以及平台运行过程中使用到的一些中间件(如Redis、Nginx等),另外测试工具本身的能力也会影响压测结果。
1.平台:系统平台本身的性能瓶颈,这是影响压测结果的直接因素;
2.服务器:由于平台是部署在Linux服务器上,服务器的CPU、内存、磁盘以及系统内核性能等也会影响平台的访问,从而影响压测的性能;
3.环境:主要是部署平台的k8s集群环境,k8s集群所占用的资源、容器以及部署方案也会对产品的访问存在影响;
4.数据库:针对平台的数据读写操作,数据库的性能会直接影响平台功能的访问;
5.中间件:目前平台用到的中间件主要就是Redis和Nginx;
6.测试工具:主要指Jmeter工具的在进行压力测试时能支持的压测能力。
由于平台采用UMC部署时,k8s集群、Nginx、Redis通过平台进行部署,默认已经进行了优化;如果存在数据读写操作,数据库影响比较大。本次主要是考察平台本身的性能瓶颈以及部署优化策略,所以主要从平台和服务器层面进行优化,同时测试工具方面要保证工具测试上限能达到平台的要求。
Jmeter配置
JMeter作为测试工具,本身也存在瓶颈,所以在进行压力测试的过程中,需要经可能屏蔽掉工具的影响,所以要从工具的资源消耗、压测方案方面进行优化,提升压测工具的压测能力。
1.调整内容
1.修改Jmeter的配置文件,bin/jmeter.properties;
2.修改remote_host,server_port,server.rmi.port,server.rmi.ssl.disable等参数,参考如图:
2.参数说明
1.Jmeter进行分布式压测时,分为控制机(Master)和压力机(Slave),Master和Salve的配置文件是相同的,配置参数以及参数值有所不同;
2.remote_hosts:Master和Salve都需要配置,其中Master需要配置Salve的ip:port,多个Salve用“,”分隔,如:remote_hosts=192.168.1.211:1099,192.168.1.212:1099,192.168.1.213:1099
3.server_port:远程服务器监听端口,Master通过这个端口与Slave进行通信,默认1099,可以指定其他端口,确保所有Slave和Master设置一致;
4.server.rmi.port:或者server.rmi.localport(不同版本可能有所区别),用于配置RMI通信(Java虚拟机之间的对象方法调用)的端口和安全性,为了确保通信顺利,建议显示配置,该端口可以和server_port相同;
5.server.rmi.ssl.disable:SSL配置,Master和Salve同时修改,改为false,关闭SSL,避免出现认证的问题;
6.注意:如果测试机既做Master也做Salve,配置时需要同时满足以上配置参数。
3.启动说明
1.在Master和Slave部署相同版本的Jmeter;
2.在Slave上通过./bin/jmeter-server(windows下是jmeter-server.bat)命令启动Jmeter服务,如:
3.在控制器下启动测试,启动分GUI和非GUI模式,GUI是windows环境下的图形化界面,非GUI没有图形界面,但是资源消耗更低:
windows下GUI模式启动:
Linux下非GUI模式启动:
参数说明:
-n:非GUI模式运行
-t:指定测试计划文件路径
-l:指定测试结果文件路径
-r:远程启动Salave
Server参数
Server的优化主要是优化产品的配置,由于平台采用UMC部署,所以相关配置直接在UMC部署容器时进行优化,或者通过更新配置文件补丁的方式处理。
1.调整内容
Server的调整主要是调整server.xml的配置,由于ESB平台本身是基于tomcat8.5版本的,所以server.xml的配置可以参考tomcat8.5的配置参数,主要调整内容包括JVM和线程参数。
2.JVM调整
ESB的JVM调优主要是修改JVM的内存参数,由于ESB产品本身采用k8s容器化部署,通过UMC云管理平台进行统一维护,所以JVM的配置也是在UMC上配置的,具体配置如图:
如果作为生产环境,ESB的JVM配置推荐4G-8G,测试环境推荐2G-4G,不建议低于2G。
3.Server.xml
server.xml是产品运行的配置文件,主要调整内容是tomcat的线程池配置和连接优化。
1.Executor:定义tomcat共享线程池,从而多个Connector及其他组件之间共享;
1)name="tomcatThreadPool":Executor名称,必填且必须唯一;
2)maxThreads="10000":tomcat可创建的最大的线程数,默认200,根据并发数设置的高一些;
3)minSpareThreads="400":使用保持活动状态的最小线程数(空闲和活动),默认25;
2.Connector:tomcat连接器,负责接收客户端的请求以及向客户端回送响应的消息:
1)acceptorThreadCount="2":tomcat服务器用于接收网络连接的Acceptor线程的数量,对于多处理器服务器,可以设置为处理器数的两倍,以充分利用多核处理器的性能;对于单处理器服务器,可以设置为2或4,以平衡性能和资源消耗;注意不要设置过高,过高可能会导致线程切换和同步时过多消耗系统资源,增加资源开销;
2)compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json,application/xml":压缩类型,指定对哪些类型的文件进行数据压缩;
3)compression="on":是否开启GZIP压缩,取值off(禁用)、on(打开,压缩文本数据);
4)compressionMinSize="1024":表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值2048;
5)enableLookups="false":是否启用DNS查找功能,true会用request.getRemoteHost()执行DNS lookup,从而返回远程客户端的主机名;false则跳过DNS lookup,以字符串形式返回IP地址,从而提高性能;默认false,生产环境建议保持关闭,提高业务能力;
6)executor="tomcatThreadPool":指定executor名称。如果设置了此属性,则Connector将使用该Executor执行程序;
7)protocol="HTTP/1.1":为Connector设置使用什么协议处理入口流量,默认值 HTTP/1.1,对于tomcat 8及更高版本,会自动根据当前情况自动选择NIO或ARP,也可以单独设置:
a.BIO:protocol="org.apache.coyote.http11.Http11Protocol"
// 阻塞IO,tomcat 7及更低版本会自动根据情况使用BIO或APR,是三种运行模式中性能最低第一种
b.NIO:protocol="org.apache.coyote.http11.Http11NioProtocol"
NIO2:protocol="org.apache.coyote.http11.Http11Nio2Protocol"
// NIO是一个基于缓冲区,并能提供非阻塞I/O操作的JAVA API 因此NIO也成为非阻塞I/O,比BIO拥有更好的并发性能,NIO2是NIO的补充(Java 1.7引入),tomcat8引入,NIO2继承NIO,增加了异步I/O(AIO)的支持;
c.APR:protocol="org.apache.coyote.http11.Http11AprProtocol")
// 调用httpd核心链接库来读取或文件传输,从而提高 Tomcat 对静态文件的处理性能,但是需要在服务器上部署APR
8)maxConnections="10000":tomcat接收和处理的最大连接数。当连接数达到maxConnections时,仍可基于acceptCount的配置接受连接,但并不会处理,直到Tomcat接收的连接数小于maxConnections;
9)connectionTimeout="20000":网络连接超时时间,单位毫秒,默认60000。
内核参数
由于本次主要压测产品的访问流量和吞吐量上限,所以需要平台具备快速的响应时间,在服务器层面需要对Linux的内核进行优化,从而提升TCP连接时的性能,同时充分发挥服务器的性能。
1.调整内容
对于ESB平台调优,系统参数优化包括网络参数优化、内存参数优化、文件系统优化、服务优化、硬件优化等。
1.网络参数优化:包括net.core.somaxconn、net.core.netdev_max_backlog、net.ipv4.tcp_max_syn_backlog、net.ipv4.tcp_fin_timeout等;
2.内存参数优化:通过对虚拟内存(swap)以及内核参数的vm.swappiness、vm.overcommit_memory等参数进行调整;
3.文件系统优化:主要调整文件描述符数量以及文件系统缓存,配置文件位置在/etc/security/limits.conf和/etc/sysctl.conf;
4.服务优化:根据服务器的使用情况,关闭服务器中一些不用的服务;
5.硬件优化:升级硬件设备(CPU、内存、硬盘)来提升性能,满足系统使用和测试需要。
由于ESB采用k8s容器化进行的部署,而容器本身没有内核,是直接复用宿主机内核,所以针对系统层面的优化直接优化宿主机服务器即可。
2.网络参数
1.net.core.rmem_default:用于设置TCP套接字接收缓冲区的初始大小,在高负载或网络拥塞的情况下,增大接收缓冲区的大小可以提高系统的吞吐量;
2.net.core.rmem_max:定义TCP套接字接收缓冲区的最大大小(以字节为单位),这个参数对于优化网络性能,特别是在处理大量数据传输时,具有重要的作用;
3.net.ipv4.tcp_tw_recycle和net.ipv4.tcp_tw_reuse:这两个参数都用于加快TCP连接回收的速度,通过将它们设置为1,可以允许将TIME_WAIT状态的socket重新用于新的TCP连接;
4.net.ipv4.tcp_timestamps:是一个与网络协议(特别是TCP/IP协议)相关的配置,用于控制TCP时间戳的使用,TCP时间戳的启用可以减少不必要的TCP连接建立和断开,从而提高网络性能。
3.内存参数
1.vm.swappiness:决定了系统在使用物理内存和交换空间(swap)之间的倾向性,参数的值范围在0到100之间,设置为0时,系统尽可能避免使用交换空间,只有在物理内存不足时才会使用;设置为100时,系统积极地将非活动的内存页换出到交换空间,以尽量保持所有内存都用作缓存。由于ESB采用k8s容器化部署,而k8s部署时是关闭了swap的了,所以改参数无需处理;
2.vm.overcommit_memory:决定了内核在分配内存时是否进行严格的检查,以及允许的内存超量使用程度,值为0:表示内核将尝试估算剩余可用的内存,并在用户空间请求更多内存时进行相应的检查;值为1:表示内核允许超量使用内存,直到所有物理内存都被用完;值为2:表示内核将使用一个决不过量使用内存的算法。
4.文件系统
1.文件描述符:是操作系统用于标识被打开文件或套接字等资源的整数。通过增加文件描述符的数量,可以提高系统同时处理文件或网络连接的能力;
文件描述符通过ulimit命令进行查询和修改,如果是永久修改,通过修改/etc/security/limits.conf配置文件:
2.文件系统缓存:是操作系统用于存储最近访问的文件数据和元数据的内存区域。通过优化文件系统缓存的参数,可以提高文件访问速度和系统性能。
文件系统缓存通过修改系统内核参数进行调整,配置文件为为/etc/sysctl.conf,主要配置有两个:vm.dirty_ratio和vm.dirty_background_ratio,这两个参数分别控制脏数据占可用内存的百分比阈值和后台写回脏数据的阈值,通过调整这两个参数,可以控制文件系统缓存的使用情况。
分析总结
性能测试是项目开发、实施过程中非常重要的内容之一,通过性能测试一方面从产品层面发现产品的性能瓶颈,从而对产品功能进行优化;另一方面在实施时进行测试可以对部署环境、系统进行优化,从而满足生产环境运行时的性能要求。
1.优化总结
本次是基于产品性能测试过程中优化的内容进行分析总结,从服务器、测试工具、产品等方面进行的性能调优,从而测试平台以及环境的性能瓶颈,从而提升生产运行过程中的整体性能,满足各类业务场景的使用需要。服务器层面主要从Linux服务器的内核参数以及软硬配置等方面进行优化,产品层面更多是优化产品的连接数,提升并发性能;测试工具更多是通过分布式的方式分摊压力,从而提升测试的结果。
2.优化提升
本次测试和调优主要是基于测试环境进行的测试,在服务器配置以及资源层面相对不足,对于实际生产环境,在测试时需要充分考虑服务器的资源情况,在保证资源充足并且满足生产使用的情况下进行调优和测试工作。另外针对数据库、测试工具等也要考虑用独立的服务器,避免测试工具的资源消耗影响系统平台。
3.说在最后
针对不同的业务场景、不同的产品,在测试时要使用不同的测试方式,如DAP平台主要用于数仓建设和可视化分析,测试重点在数据的加工处理以及页面的可视化效果方面;MDM平台要结合实际项目中主数据的数据量和变更频率,一般主数据更多是考察数据同步的数据量性能;ESB平台更多考察API接口的调用性能,以满足高并发的接口调用需求;IDM平台测试高并发的认证性能,以满足大批量认证的需求。
一般在实际项目项目中,平台的测试都是和实际业务、数据量、使用场景等相互结合的,需要根据业务使用量以及具体的使用内容进行调优和测试,以保证平台功能和集成过程满足实际生产需要。对于项目实施人员,更多需要考虑在数据规划、平台部署、环境配置等方面进行优化,以充分发挥产品平台的性能,才能保证项目的顺利推进和交付。
本文由@数通畅联原创,欢迎转发,仅供学习交流使用,引用请注明出处!谢谢~
- 上一篇:一次“惊心动魄”的压测实战的复盘
- 下一篇:数据库压力测试方法小结
相关推荐
- Dubai's AI Boom Lures Global Tech as Emirate Reinvents Itself as Middle East's Silicon Gateway
-
AI-generatedimageAsianFin--Dubaiisrapidlytransformingitselffromadesertoilhubintoaglob...
- OpenAI Releases o3-pro, Cuts o3 Prices by 80% as Deal with Google Cloud Reported to Make for Compute Needs
-
TMTPOST--OpenAIisescalatingthepricewarinlargelanguagemodel(LLM)whileseekingpartnershi...
- 黄仁勋说AI Agent才是未来!但究竟有些啥影响?
-
,抓住风口(iOS用户请用电脑端打开小程序)本期要点:详解2025年大热点你好,我是王煜全,这里是王煜全要闻评论。最近,有个词被各个科技大佬反复提及——AIAgent,智能体。黄仁勋在CES展的发布...
- 商城微服务项目组件搭建(五)——Kafka、Tomcat等安装部署
-
1、本文属于mini商城系列文档的第0章,由于篇幅原因,这篇文章拆成了6部分,本文属于第5部分2、mini商城项目详细文档及代码见CSDN:https://blog.csdn.net/Eclipse_...
- Python+Appium环境搭建与自动化教程
-
以下是保姆级教程,手把手教你搭建Python+Appium环境并实现简单的APP自动化测试:一、环境搭建(Windows系统)1.安装Python访问Python官网下载最新版(建议...
- 零配置入门:用VSCode写Java代码的正确姿
-
一、环境准备:安装JDK,让电脑“听懂”Java目标:安装Java开发工具包(JDK),配置环境变量下载JDKJava程序需要JDK(JavaDevelopmentKit)才能运行和编译。以下是两...
- Mycat的搭建以及配置与启动(mycat2)
-
1、首先开启服务器相关端口firewall-cmd--permanent--add-port=9066/tcpfirewall-cmd--permanent--add-port=80...
- kubernetes 部署mysql应用(k8s mysql部署)
-
这边仅用于测试环境,一般生产环境mysql不建议使用容器部署。这里假设安装mysql版本为mysql8.0.33一、创建MySQL配置(ConfigMap)#mysql-config.yaml...
- Spring Data Jpa 介绍和详细入门案例搭建
-
1.SpringDataJPA的概念在介绍SpringDataJPA的时候,我们首先认识下Hibernate。Hibernate是数据访问解决技术的绝对霸主,使用O/R映射(Object-Re...
- 量子点格棋上线!“天衍”邀您执子入局
-
你是否能在策略上战胜量子智能?这不仅是一场博弈更是一次量子智力的较量——量子点格棋正式上线!试试你能否赢下这场量子智局!游戏玩法详解一笔一画间的策略博弈游戏目标:封闭格子、争夺领地点格棋的基本目标是利...
- 美国将与阿联酋合作建立海外最大的人工智能数据中心
-
当地时间5月15日,美国白宫宣布与阿联酋合作建立人工智能数据中心园区,据称这是美国以外最大的人工智能园区。阿布扎比政府支持的阿联酋公司G42及多家美国公司将在阿布扎比合作建造容量为5GW的数据中心,占...
- 盘后股价大涨近8%!甲骨文的业绩及指引超预期?
-
近期,美股的AI概念股迎来了一波上升行情,微软(MSFT.US)频创新高,英伟达(NVDA.US)、台积电(TSM.US)、博通(AVGO.US)、甲骨文(ORCL.US)等多股亦出现显著上涨。而从基...
- 甲骨文预计新财年云基础设施营收将涨超70%,盘后一度涨8% | 财报见闻
-
甲骨文(Oracle)周三盘后公布财报显示,该公司第四财季业绩超预期,虽然云基建略微逊于预期,但管理层预计2026财年云基础设施营收预计将增长超过70%,同时资本支出继上年猛增三倍后,新财年将继续增至...
- Springboot数据访问(整合MongoDB)
-
SpringBoot整合MongoDB基本概念MongoDB与我们之前熟知的关系型数据库(MySQL、Oracle)不同,MongoDB是一个文档数据库,它具有所需的可伸缩性和灵活性,以及所需的查询和...
- Linux环境下,Jmeter压力测试的搭建及报错解决方法
-
概述 Jmeter最早是为了测试Tomcat的前身JServ的执行效率而诞生的。到目前为止,它的最新版本是5.3,其测试能力也不再仅仅只局限于对于Web服务器的测试,而是涵盖了数据库、JM...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- Dubai's AI Boom Lures Global Tech as Emirate Reinvents Itself as Middle East's Silicon Gateway
- OpenAI Releases o3-pro, Cuts o3 Prices by 80% as Deal with Google Cloud Reported to Make for Compute Needs
- 黄仁勋说AI Agent才是未来!但究竟有些啥影响?
- 商城微服务项目组件搭建(五)——Kafka、Tomcat等安装部署
- Python+Appium环境搭建与自动化教程
- 零配置入门:用VSCode写Java代码的正确姿
- Mycat的搭建以及配置与启动(mycat2)
- kubernetes 部署mysql应用(k8s mysql部署)
- Spring Data Jpa 介绍和详细入门案例搭建
- 量子点格棋上线!“天衍”邀您执子入局
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (56)
- oracle 乐观锁 (53)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)