游戏服务器性能测试分析实战

news2025/6/8 22:54:49

今天遇到一个性能压测的问题,也是很多同学做游戏服务器开发经常会遇到的,今天记录一下分享给大家。

性能压测遇到的问题

对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。

服务器硬件情况:

8核16G服务器, 带宽1000M, redis假设在独立的内网云服务上,通过内网连接;

性能压测:

压测功能接口1: 查询当前服务器的时间戳,并返回给客户端;

压测功能接口2: 给定key, 查询redis服务器hash表中的一个value,并返回客户端;

压测手段,并发2000次请求;

测试功能接口1结果: (并发2000,TPS 16000,RT 20ms)

测试功能接口2结果: (并发2000,TPS 6000, RT 3000ms)

压测问题:

为什么并发2000,查询一个redis 结果需要等待3秒, TPS 下降到6000,哪里的问题? 如何优化?

附:

RT: Response Time, 从发送请求到获得结果的响应时间,包括了Request Time, Response Time。

TPS: Transactions Per Second, 每秒处理的事务数。

性能分析之基本情况调查

遇到这类问题,我们首先要做问题分析,在处理问题之前,一定要了解清楚并发时候的服务端技术架构组成,以及相关信息,然后再对问题做出对应的判断与调试。我思考了一下,先问了一些相关的问题如下:

问题1: 做并发测试时,服务器的架构是如何的?如何部署的?

首先就要搞清楚,当前服务器架构是多少个线程or进程, 如何并发的?能否发挥多核的优势。

目前服务端架构是基于Java技术,网络请求基于Java的Netty, 逻辑处理接口采用多线程来进行处理。处理线程与Netty IO线程是分开的。目前IO线程为4个,处理线程为8个。

问题2: 目前极限测试的情况下各CPU以及硬件设备的占比情况如何? (CPU, 内存,IO, 网络带宽)

CPU: 目前CPU占用率约为20%;

内存: 目前内存的使用为1G左右, 内存稳定;

磁盘文件IO: 测试的时候没有文件读写等IO操作;

网卡占用: 目前回复的都是不是大量的数据,网络带宽占用很低;

问题3: Redis服务器情况如何?

Redis服务器目前为独立的,Redis服务器的资源占还很充足,目前未发现有太严重的性能问题。

问题4: 停掉并发, 单独响应redis的时间未多少?是否正常?

停掉并发后,客户端向服务端发送一个redis 查询的请求,大概响应时间为40ms左右。算上来回的网络时间,是正常的。

问题5: 在服务器向Redis服务器做一次redis查询多久?

这里在服务端代码中打印,向Redis服务器查询一次hget大约需要1ms左右。

为什么要问这些问题呢?这个是解决性能问题的关键的一些依据,根据这些依据我们来制定一些问题可能的方向。问题1了解服务端基本的架构与部署,能知道这个架构是否能充分的发挥目前硬件的性能。问题2,主要是了解服务器是否遇到了运行时的瓶颈,导致无法在提升并发性能。问题3,当前的性能测试与Redis有关系,排除掉Redis服务器的干扰。问题4,屏蔽掉并发后,看一下整个查询链路逻辑中是否有异常。排除掉一个请求中代码逻辑的问题。问题5, 测试服务端请求Redis的情况,彻底排除掉Redis的影响,因为本次的性能测试请求与Redis有关。

问题的分析与解决

经过上面的调查,我们总结了一下相关的情况,单次访问Redis正常,从请求到返回耗时大约是40ms, 说明整个链路没有大问题。

Redis查询业务时间=客户端发送请求到服务端时间+服务端查询Redis结果的时间+服务端发送回应到客户端时间。

过程中没有大规模的内存创建与释放,没有IO操作, 内存与IO不会为性能的瓶颈。Redis服务器一切正常,Redis支持的高并发一般不会有太大的问题。硬件的CPU占用率等都很低,并没有发挥出来完全的硬件,说明应该还有提升的可能。

假设单核情况下服务端处理业务,服务端向Redis服务器请求需要等待1ms的话,那么2000次并发就需要2秒。同时还需要接受客户端的请求+发送数据到客户端做网络IO。问题中,总共8个CPU核心,CPU占用率20%左右,和我们数据分析出来的基本能对上。从上面分析,我们可能是开的线程不够,导致处理redis的时候并发率上不来,是IO线程不够还是Task 逻辑处理线程不够呢?从简单的查询来推断,应该是逻辑处理线程不够。IO线程处理第一个网络请求的时候没有问题,说明IO线程数目是没有问题的。

大概估摸计算以后,我就让小伙伴加大逻辑处理线程与IO线程,然后对比,如图:

今天的分享就到这里了,问题比较简单,但是分析的思路值得推荐给大家,所以我就写了这个文章,关注我,可以获得更多游戏开发的文章与教程。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/334397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Prometheus node_exporter 部署

Prometheus node_exporter 安装包下载 Prometheus 官网下载地址 包含Prometheus软件及各种exporter插件 node_exporter1.4.0安装包 解压安装 tar -xvf node_exporter-1.4.0.linux-amd64.tar.gz注册服务 可参考 linux 自定义服务 vi /etc/init.d/promethues#!/bin/bash …

python selenium浏览器复用技术

使用selenium 做web自动化的时候,经常会遇到这样一种需求,是否可以在已经打开的浏览器基础上继续运行自动化脚本? 这样前面的验证码登录可以手工点过去,后面页面使用脚本继续执行,这样可以解决很大的一个痛点。 命令行…

Spring 5

文章目录传统JavaWeb开发的困惑IoC、DI和Aop思想提出Spring框架的诞生Spring 框架概述Spring 框架历史Spring Framework技术栈图示BeanFactory 快速入门基于xml的Spring应用基于注解的Spring应用传统JavaWeb开发的困惑 IoC、DI和Aop思想提出 Spring框架的诞生 Spring 框架概述 …

Ansys Lumerical | 纳米线栅偏振器仿真应用

说明 由亚波长金属光栅(纳米线栅偏振器)组成的高对比度偏振控制器件正在取代体光学元件。纳米线栅偏振器提供了较好的消光比对比度、最小的吸收以解决高亮度照明,以及紧凑的形状以便于大规模制造和集成在小型光学器件中。然而,纳米…

代谢组学Nature子刊!抑郁症居然“男女有别”,脑膜淋巴管起关键作用!

文章标题:A functional role of meningeal lymphatics in sex difference of stress susceptibility in mice 发表期刊:Nature Communications 影响因子:17.694 发表时间:2022年8月 作者单位:中山大学中山医学院 …

三层交换机【实验】

目录 1、要求: 2、拓扑: 3、创建vlan和端口定义并划入vlan: 4、创建以太网中继Eth-Trunk使sw1和sw2的相互冗余并且不浪费链路: 5、使用mstp定义组和对应的根: 6、配置网关冗余: 7、核心层的路由的IP配…

基于蜣螂算法改进的DELM分类-附代码

蜣螂算法改进的深度极限学习机DELM的分类 文章目录蜣螂算法改进的深度极限学习机DELM的分类1.ELM原理2.深度极限学习机(DELM)原理3.蜣螂算法4.蜣螂算法改进DELM5.实验结果6.参考文献7.Matlab代码1.ELM原理 ELM基础原理请参考:https://blog.c…

为什么越来越多的团队选择放弃Jira?有哪些替代产品?

国产类似Jira 的软件包括:1.一站式研发项目管理软件 PingCode;2.通用型项目协作工具 Worktile;3.开源项目管理软件 Redmine;4.免费项目管理软件 Trello;5.无代码项目管理软件 Moday;6.小团队项目管理软件 T…

《嵌入式 – GD32开发实战指南》第22章 SPI

开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 22.1 SPI简介 SPI,是Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的…

Git修改已有仓库的默认分支并删除其他分支

Git仓库中有一个分支没有用,打算删除掉,查找解决办法,儒雅的烤地瓜 的一篇博客1很详细,我按照他的第三点命令敲入,结果出现报错。 查看博客在git push origin --delete main 这条命令前说了:要删除的分支可…

SAS应用入门学习笔记4

分组和排序&#xff1a; By 语句&#xff1a; 1&#xff09;使用sort过程对观测进行排序&#xff1a; proc sort data输入数据集 <out输出数据集> <其他选项>; # 如果有out&#xff0c;那么原有数据集不变&#xff1b; by 变量列表; # 可以加一个变量或两个…

Swagger3 API接口文档规范课程(内含教学视频+源代码)

Swagger3 API接口文档规范课程&#xff08;内含教学视频源代码&#xff09; 教学视频源代码下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87431932 目录Swagger3 API接口文档规范课程&#xff08;内含教学视频源代码&#xff09;教学视频源代…

aws cloudformation 使用CommandRunner在堆栈中运行脚本

参考资料 Running bash commands in AWS CloudFormation templates 如何使用 AWSUtility::CloudFormation::CommandRunner 在 CloudFormation 堆栈中的资源之前或之后运行命令&#xff1f; 由于cloudformation语法和资源的限制&#xff0c;有些场景下我们可能会希望执行一些…

Mysql安装前的脚本准备

文章目录1. 将modules解压后放到Share共享文件夹中&#xff0c;将Share下的modules移动到根目录2. 将setup.sh放到Share共享文件夹中&#xff0c;通过共享将Share下的setup.sh移动到/Desktop3. 到/根目录下查看modules是否移动成功4. 到/root/Desktop下查看setup.sh5. 执行 ./s…

计算系统概论实验Lab 6——C重写Lab1-5

Lab 6 C重写Lab1-5 Purpose 使用高级编程语言&#xff08;例如C / C&#xff09;来实现以前编写的所有代码。请注意&#xff0c;该算法需要与之前使用的算法一致 condition&#xff1a; 明确禁止使用LC3不直接支持的*、/、%>><<等操作及等效库函数;可以使用&am…

Cypress简介及在Windows下安装

cypress 简单介绍 Cypress 是基于 JavaScript 的前端测试工具&#xff0c;它是自集成的&#xff0c;提供了一套完整的端到端测试&#xff0c;无须借助其他外部工具&#xff0c;安装后即可快速地创建、编写、运行测试用例&#xff0c;可以对浏览器中运行的任何内容进行快速、简…

springboot 针对rabbitmq多vhost情况处理

目录说明代码自定义rabbitmq的pom信息&#xff1a;重写one的连接工厂重写two的连接工厂&#xff1a;创建队列、交换机并绑定&#xff1a;消费者消费消息生产者发送消息说明 需求场景&#xff1a; 项目中在已接入rabbitmq一个vhost的基础上&#xff0c;需要再引入多个vhost进行…

线性杂双功能peg化试剂——HS-PEG-COOH,Thiol-PEG-Acid

英文名称&#xff1a;HS-PEG-COOH&#xff0c;Thiol-PEG-Acid 中文名称&#xff1a;巯基-聚乙二醇-羧基 HS-PEG-COOH是一种含有硫醇和羧酸的线性杂双功能聚乙二醇化试剂。它是一种有用的带有PEG间隔基的交联或生物结合试剂。巯基或SH、巯基或巯基选择性地与马来酰亚胺、OPSS、…

基于“python+”潮汐、风驱动循环、风暴潮等海洋水动力模拟实践技术

ADCIRC是新一代海洋水动力计算模型&#xff0c;它采用了非结构三角形网格广义波动连续方程的设计&#xff0c;在提高计算精确度的同时还减小了计算时间。被广泛应用于&#xff1a;模拟潮汐和风驱动的循环、预测风暴潮和洪水和近岸海上作业等。除此之外&#xff0c;ADCIRC也是我…

MySQL 存储引擎

MySQL内部展示图 分为三个层次 客户端 mysqlserver 存储引擎 我认为与之前先的UBD三层相类似 UI端传数据 B端逻辑处理 数据库端进行执行方面进行类似 存储引擎的分类 mySQL 5.5 版本采用InnoDB 为默认引擎&#xff08;生成.frm和.ibd文件&#xff09; 给大家介绍其他存储引…