一次压测经验过程的经验记录

开篇说明

如果在这里获得过启发和思考,希望点赞支持!对于内容有不同的看法欢迎来信交流。
技术栈 >> java
邮箱 >> 15673219519@163.com

描述

通常对于QPS较高的web应用程序在开发完成后,除了功能测试之外还需要做一轮压力测试。这样的好处主要有以下几点,也是本次压测的目的

  • 确保程序没有性能问题。
  • 确定需要的使用资源,包括web服,DB资源,磁盘资源等等。
  • 大致预估机器设配能够承受的压力,如:DB读写QPS等等
本次的压测目标(本次压测工具使用jemter)
接口类型接口操作预估OPS实际QPS峰值QPS
只读接口redis get(1),tidb select(1)1w14983/s-
读写接口tidb select(1),update(1),insert(1)5k6022/s-
测试过程
  • 压测时候最好使用内网地址,这样可以保证jemter达到最大请求数,提升资源使用率。

  • 对于某些首次操作查询DB,之后查询走redis的。建议在前期去掉缓存,便于更好测试。后期基本测试结束可加上redis,再去估计缓存内存使用。

接口类型jemter并发pod/cpu使用/内存使用tidb-kv/cup使用/内存使用tidb-db/cup使用/内存使用redis/cup使用/内存使用db-连接池/初始化redis-连接池qps均值结论
redis get(1),db select(1)250C6-12G*3/ 50%/ 30%C6*3/10% /20%C6*3/10%/20%C4-12G1001003920/s压力不足,加并发数
500C6-12G*3/ 90%/ 40%C6*3/12% /20%C6*3/11%/21%C4-12G1001004950/spadcup不足,加pad或pad加cup
1000C6-12G*6/ 40%/ 40%C6*3/12% /22%C6*3/11%/21%C4-12G1001005230/s机器资源足够,qps上不去,加大连接数
1000C6-12G*6/ 65%/ 50%C6*3/25% /30%C6*3/25% /30%C4-12G50020010278/s压力不足,加并发数
1500C6-12G*6/ 88%/ 60%C6*3/30% /35%C6*3/30% /35%C4-12G50020014983/s6pod,可以达到我们只读QPS要求,接下次读写接口测试
tidb select(1),update(1),insert(1)500C6-12G*6/ 60%/ 50%C6*3/60% /70%C6*3/50% /50%C4-12G5002003832/s压力不足,加并发数
1000C6-12G*6/ 92%/ 55%C6*3/80% /80%C6*3/60% /60%C4-12G5002005102/s满足要求,可以继续测试DB极限,加pod,产生更多db操作
1500C6-12G*8/ 80%/ 55%C6*4/90% /85%C6*3/80% /80%C4-12G5002006022/sdb差不多到极限
测试结果
  • 需要达到要求的QPS,我们需要准备的机器资源 pod:C6-12G*8 tidb: db C6*4; kv C6*3, db:连接池最大连接500,redis最大连接200
  • 需要注意的点:
  • 在增加pod的时候,需要注意对db,redis的连接数需要保证,pod数*单个pod最大连接数<db的最大连接数,否则会导致db的效率大大降低。
  • 程序的内存我们需要进入到pod中查看(java程序),通常看java heap, 老年代,新生代等接口。(没有大对象操作的情况下,java内存几乎达不到瓶颈)
  • 大致可以得出结论:单个db:可以承受的qps 5000/s,通常情况下web程序的瓶颈在db这里,通过本次测试结果,我们就可以根据接口中对db的操作次数,大致需要多少的资源满足需求的qps。
优化程序
  • 对于java,我们可以使用一些程序诊断工具,判断程序是否存在性能问题,或者是某个方法执行比较耗时;
  • 本次我是用到arthas,生成火焰图的方式,看那些方法执行占用的cup比较长,从而定位到问题所在。(推荐arthas)

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

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

相关文章

工厂模式~

1. 简单工厂 它的主要特点是需要在工厂类中做判断&#xff0c;从而创造相应的产品。当增加新的产品时&#xff0c;就需要修改工厂类。在简单工厂模式中&#xff0c;增加新的产品需要修改工厂类&#xff0c;这违反了开闭原则&#xff08;对扩展开放&#xff0c;对修改封闭&#…

计算机网络-H3C 交换机FTP与TFTP

一、FTP与TFTP概述 FTP&#xff0c;全称为File Transfer Protocol&#xff0c;即文件传输协议&#xff0c;是一种用于在Internet上进行文件传输的应用层协议。FTP是基于客户端-服务器架构设计的&#xff0c;并使用TCP作为其传输层协议。TFTP (Trivial File Transfer Protocol) …

java继承,接口,抽象类

目录 目录 1 继承的含义 2 继承的好处 3使类与类之间产生了关系。 看这里继承-------我的理解 代码部分 接口 代码 抽象类 代码 各位友友们大家好呀&#x1f60a;&#xff01; 今天让我们继续回顾java&#xff0c;看看java中的抽象类以及接口继承是什么&#x1f914…

如何精确计算 π ?

如何精确计算 π &#xff1f; 01 原本是要回顾一下第六章内容&#xff0c;也就是“间隔性重复”。但我已经迫不及待&#xff0c;想要知道如何精确计算 π &#xff0c;因此&#xff0c;我们快走一步&#xff0c;来探讨一下 π 的计算。 对于 π 的计算&#xff0c;我从学校时…

Python基础学习(5)流程控制

文章目录 一. 程序三大执行流程二. 分支结构1.单分支结构(if)2.双分支结构(if..else)3.多分支结构(if..elif..else) 二,缩进(tab键)三,循环结构1.while循环2.for循环①遍历字典 五.break&#xff0c;continue和pass语句1.break&#xff0c;continue2.pass Python基础学习(1)基本…

蓝桥杯(日期问题纯暴力)

纯纯暴力&#xff0c;写的想吐&#xff0c;玛德服了。 但是复习了vector去重方法&#xff0c;日期的合法性判断。 #include <iostream> #include <vector> #include <cstring> #include <algorithm>using namespace std; vector<int> res; st…

浪潮信息数据中心管理平台InManage升级发布 新增三大场景功能

在AIGC应用日益广泛的当下&#xff0c;浪潮信息聚焦AIGC在数据中心运维管理中面临的难题&#xff0c;进一步通过技术创新升级功能及体验&#xff0c;为AIGC的高效应用创造了良好的基础。近日&#xff0c;浪潮信息数据中心管理平台InManage升级发布&#xff0c;新增资产数字化管…

强化学习(一)

#! https://zhuanlan.zhihu.com/p/686235471 深度强化学习&#xff08;一&#xff09;&#xff08;基础概念&#xff09; 一.马尔可夫决策过程 Agent:智能体&#xff0c;动作或决策对象 Environment: 与智能体交互的对象&#xff0c;可随时间变化 State&#xff1a;对某一…

智慧城市的未来:利用数字孪生技术推动智慧城市的智能化升级

目录 一、引言 二、数字孪生技术概述 三、数字孪生技术在智慧城市中的应用 1、城市规划与建设 2、城市管理与运营 3、公共服务与民生改善 4、应急管理与灾害防控 四、数字孪生技术推动智慧城市的智能化升级的价值 1、提高城市管理的智能化水平 2、优化城市资源配置 …

Allegro许可与其他软件的兼容性优势

解锁企业软件管理新篇章&#xff0c;Allegro许可与其他软件的兼容性优势 在数字化经济的时代&#xff0c;企业越来越依赖于各种软件应用来提升运营效率和管理水平。然而&#xff0c;企业在选择和使用软件时&#xff0c;经常会遇到与其他软件不兼容的问题&#xff0c;导致数据无…

答题pk小程序源码技术大解析

答题pk小程序源码解析 在数字化时代&#xff0c;小程序因其便捷性、即用性而受到广泛欢迎。其中&#xff0c;答题pk小程序更是成为了一种寓教于乐的现象。它不仅为用户提供了趣味性的知识竞技平台&#xff0c;还为企业、教育机构等提供了互动营销和知识传播的新途径。本文将对…

2024年品牌推广:构建品牌生态圈与注重品牌故事和文化传播

在全球经济深度融合、数字化浪潮汹涌澎湃的2024年&#xff0c;品牌推广的策略与模式正经历着前所未有的变革。在这一背景下&#xff0c;构建品牌生态圈和注重品牌故事与文化传播&#xff0c;成为了企业提升品牌竞争力和市场占有率的重要手段。 一、2024年市场经济分析与现状 …

CDA-LevelⅡ【考题整理-带答案】

关于相关分析中应注意的问题&#xff0c;下面说法错误的是&#xff1a;B 如果两变量间的相关系数为0&#xff0c;则说明二者独立 。解释&#xff1a;只能说明两者不存在线性相关关系现通过参数估计得到一个一元线性回归模型为y3x4&#xff0c;在回归系数检验中下列说法错误的是…

遥感与ChatGPT:科研中的强强联合

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已逐渐渗透到各个领域&#xff0c;为传统行业带来了前所未有的变革。其中&#xff0c;遥感技术作为观测和解析地球的重要手段&#xff0c;正逐渐与AI技术相结合&#xff0c;为地球科学研究与应用提供了全新的…

软件设计模式:模板方法模式

1. 简介 模板方法模式是一种行为型设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;将一些步骤延迟到子类中实现。这样&#xff0c;可以在不改变算法结构的情况下&#xff0c;重新定义算法中的某些步骤。 2. 使用条件 模板方法模式适用于以下情况&#xff1a; 算法…

【elasticsearch】ES的JAVA工具类完整版(待完成...)

springboot 的 elasticsearch 版本: 7.15.2 前情提要: 1.首先要理解 elasticsearch 对于【数据类型】很严格,如果字段类型不规范,在 检索/排序/聚合 时候类型不正确就会出现报错或者查不到数据的问题。所以在一般String类型插入结构如下: 这样的结构,不仅可以支持分词查…

【力扣晒题练习】232. 用栈实现队列

题目描述&#xff1a; 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素…

基于SpringBoot的招聘网站

基于jspmysqlSpring的SpringBoot招聘网站项目&#xff08;完整源码sql&#xff09; 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》…

Elastic Stack--03--索引操作、文档操作、_cat

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1._cat/_cat/indices?v 查看所有的索引信息 2.索引操作索引就相当于我们讲的关系型数据库MySQL中的 database 2.1 创建索引PUT /索引名 2.2 查看索引信息GET /索引…

Java 容器启动执行指定任务

1、实现CommandLineRunner接口 实现CommandLineRunner接口&#xff0c;注意做初始化任务的类需要放在扫描路径下&#xff0c;使用Component注入到spring容器中。 import com.zw.service.StudentService; import org.springframework.beans.factory.annotation.Autowired; impo…