百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

如何在压测过程中进行调优

mhr18 2024-12-07 22:20 24 浏览 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平台测试高并发的认证性能,以满足大批量认证的需求。

一般在实际项目项目中,平台的测试都是和实际业务、数据量、使用场景等相互结合的,需要根据业务使用量以及具体的使用内容进行调优和测试,以保证平台功能和集成过程满足实际生产需要。对于项目实施人员,更多需要考虑在数据规划、平台部署、环境配置等方面进行优化,以充分发挥产品平台的性能,才能保证项目的顺利推进和交付。

本文由@数通畅联原创,欢迎转发,仅供学习交流使用,引用请注明出处!谢谢~

相关推荐

几种 TCP 连接中出现 RST 的情况

现在是一个网络时代了。应该不少程序员在编程中需要考虑多机、局域网、广域网的各种问题。所以网络知识也是避免不了学习的。而且笔者一直觉得TCP/IP网络知识在一个程序员知识体系中必需占有一席之地的。在...

Redis连接使用报RDB error错误

该错误信息:Errorinexecution;nestedexceptionisio.lettuce.core.RedisCommandExecutionException:MISC...

lua 语法介绍与 NGINX lua 高级用法实战操作

一、概述lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。官网:https://www.lua.org/二、l...

Python教程——20.协程 - 2

异步编程asyncio.Future对象Task继承Future,Task对象内部中的await结果的处理基于Future对象来的在Future对象中会保存当前执行的这个协程任务的状态,如果当...

“我的足迹”、“浏览历史”,Redis如何快速记录与展示?

咱们在网上“买买买”、“逛逛逛”的时候,总会留下各种各样的“足迹”。无论是电商APP里你最近浏览过的商品,视频网站上你刚刚看过的剧集,还是新闻客户端里你点开过的文章……这些“历史记录”,有时候还真挺有...

你手机上的“消息推送”,Redis可能参与其中

手机上那些时不时就“叮咚”一下的消息推送,确实是咱们数字生活里不可或缺的一部分。这篇咱们就来聊聊,Redis这位“消息灵通人士”,是如何在这场“信息接力赛”中大显身手,确保那些重要的、有趣的通知,能够...

短视频APP的“附近的人”,Redis如何快速匹配?

刷短视频,除了看各种搞笑段子、才艺展示,有时候是不是也想看看“同城”或者“附近”的人都在发些啥有意思的内容?或者,平台也会时不时地给你推荐一些“附近正在直播”的主播,让你感觉一下子拉近了和这个虚拟世界...

微信朋友圈的点赞、评论,Redis在背后默默付出

微信朋友圈,这片小小的“自留地”,承载了我们多少喜怒哀乐、生活点滴啊!一张精心修饰的照片,一段随感而发的文字,发出去之后,最期待的是什么?那必须是屏幕下方不断冒出来的小红心和一条条真诚(或者商业互吹)...

网站登录老是掉线?Redis帮你记住你是谁!

有没有过这样的糟心体验?你好不容易登录了一个网站,刚看了两篇帖子,或者购物车里刚加了几件宝贝,结果一刷新页面,或者稍微离开了一会儿,回来就发现——“哎?我怎么又退出了?!”又得重新输入用户名、密码、...

你常用的APP,哪些地方可能用到了Redis?(猜想与分析)

咱们现在的生活,简直是离不开各种各样的手机APP了!从早上睁眼刷新闻,到中午点外卖,再到晚上刷短视频、玩游戏,一天到头,指尖在屏幕上就没停过。这些APP为了让我们用得爽、用得顺心,背后可是使出了浑身解...

Redis是啥?为啥程序员天天挂嘴边?小白也能看懂!

这Redis到底是何方神圣?为啥那些天天在电脑前敲代码的程序员小哥哥小姐姐们,老是把它挂在嘴边,好像离了它地球都不转了似的?别担心,咱们今天不说那些听了就头大的代码和术语,就用大白话,保证你听完一拍大...

面试官:请你说说Redis为什么这么快?

1)Redis是基于内存的存储数据库,绝大部分的命令处理只是纯粹的内存操作,内存的读写速度非常快。2)Redis是单进程线程的服务(实际上一个正在运行的RedisServer肯定不止一个线程,但只有...

有了强大的关系型数据库,为什么还需要Redis?

在数字世界的浩瀚海洋中,关系型数据库,例如我们熟知的MySQL、PostgreSQL或Oracle,无疑是那些承载着核心业务数据、坚如磐石的“国家图书馆”或“银行金库”。它们以严谨的结构、强大的事务处...

Java 中间件数据可靠性串讲:从 MQ 、MySQL、Redis 不丢失的保障之道

引言在现代分布式系统中,中间件扮演着至关重要的角色,它们是构建高可用、高性能、高可扩展应用架构的基石。消息队列(MQ)、数据库(如MySQL)、缓存(如Redis)等是其中最具代表性的组件。然而,...

运维部署方式之——虚机部署

标准化使用作業系统:LinuxCentOS7自动化方式通过Ansible系统初始化playbook来管理。目的系统初始化工作是一个简单、繁复的工作,从云网得到的虚拟主机只是一个基础的系统环境,...

取消回复欢迎 发表评论: