
性能测试
文章平均质量分 94
我乐了.
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
如何根治慢 SQL?
走索引查询数据时,如果该索引已经包含需要的数据,则称之为索引覆盖。若索引中不能拿到想要的数据,则需要通过主键拿一整行数据,这个过程叫回表,需要一次 IO 操作,所以我们写 SQL 时尽量使用索引覆盖,降低 IO 开销。原创 2024-02-21 10:25:56 · 816 阅读 · 0 评论 -
如何才能优化 MySQL 性能?
一次 SQL 的查询过程是怎样的?简单来说,我们可以将这个过程概括为以下 5 步。客户端发送一个查询 SQL 给数据库服务器。服务器先检查查询缓存,如果命中,也就是查询缓存中有这条记录,那么便直接返回缓存中的结果。如果没有命中,则进入下一阶段(解析器)。服务器由解析器检查 SQL 语法是否正确,然后由预处理器检查 SQL 中的表和字段是否存在,最后由查询器生成执行计划,也就是 SQL 的执行方式或者步骤。MySQL 根据优化器生成的执行计划,调用存储引擎的 API 来执行查询。将结果返原创 2024-02-21 10:24:29 · 1080 阅读 · 0 评论 -
如何应对 Redis 缓存穿透、击穿和雪崩?
通过如上三步就可以完成 Java 使用 Redis 的 demo,我大概总结下代码流程,第一次先判断 Redis 中是否存在查询的数据,如果没有就需要从数据库中读取数据了,读取成功之后把数据回写到 Redis 中,后面的请求就能直接从 Redis 中直接读取了,较大地减少了对数据库的查询压力。一般这种情况都是缓存失效导致的,在缓存失效的时间段有大量并发用户访问,首先访问缓存,因为 Key 已经过期了,所以查不到数据,然后所有查询压力都会落到数据库上,造成数据库的压力过大。上远高于 MemCached。原创 2024-02-21 10:21:08 · 763 阅读 · 0 评论 -
如何通过 Arthas 定位代码链路问题?
下面的场景你一定很熟悉:如果线上出现了偶发性问题,我们需要花费大量时间一步步排查,日志里的每个细节都不能错过,如果线上不能直接得出结论,还需要线下再去复现,很消耗时间和精力;某行代码没有被执行,也没有出现报错信息,按照传统的方法可能会去加一些判断日志,这就涉及再次上线的问题,很多公司上线流程需要审批,这增加了内耗。而熟练使用 Arthas 这个工具便可以很好地解决以上问题,接下来我将介绍下 Arthas 以及实战中怎么用 Arthas 定位问题。原创 2024-02-21 10:20:00 · 1135 阅读 · 0 评论 -
如何基于 JVM 分析内存使用对象?
对于内存回收其实也是这样的,如果不分代那么所有的对象可能都在同一个大的区间里,GC 依次判断则效率必然是很低,如果是分代处理,对不同的区域分以不同的回收策略,这样效率会高很多。从 Eden 区存活下来的对象首先会被复制到 From 区,当 From 区满时,此时还存活的对象会被转移到 To 区,经历了多次的 Minor GC 后,还存活的对象就会被复制到老年代,老年代的 GC 一般叫作 FullGC 或者 MajorGC。,它的作用是保存线程当前程序的执行位置,以保证多线程的切换。原创 2024-02-20 10:35:27 · 1029 阅读 · 0 评论 -
如何从 CPU 飙升定位到热点方法?
JVM 是 Java Virtual Machine 的缩写,它是一个独立出来的运行环境,通过这样的环境去进行 Java 代码中各种逻辑运行。从图中你可以看到,一般在底层物理机上会部署多个云服务器,而云服务器上又可以部署多个基于 Docker 的 JVM 节点,这样的部署结构也是比较常用的,既能做到。原创 2024-02-20 10:33:57 · 2063 阅读 · 0 评论 -
Docker 的制作、运行以及监控
上面可以有很多集装箱,即 Docker,你可以把 Docker 看作是独立的子环境,有独立的系统和应用,比如经常因为一些历史原因开发的多个模块依赖于不同的 JDK 版本,将这两个模块部署在一台 Linux 服务器上可能很容易出问题,但是如果以 Docker 的方式便很容易解决版本冲突的问题。的公司,他们需要的系统处理能力自然也越高。到此就完成了一个基于 Docker 的 JMeter,上面演示了从制作到运行的全过程,同样对于其他Docker 的制作流程也是类似的,你可以基于一种先练习。原创 2024-02-20 10:31:00 · 987 阅读 · 0 评论 -
如何把可视化监控也做得酷炫?
Prometheus:既然 Exporter 作为 agent,那必然有一套中心化的数据采集存储组件,这个组件就是 Promethues,它通过接收 Exporter 采集的数据,并按照一定的规则进行计算整合,通过 AlertManager 设置报警规则,达到触发条件后就发送报警信息。可视化监控除了直观外,我认为还有如下两点优势。,可以更快速地把信息传递给项目其他成员,每位成员可以通过大屏的链接去访问,自由选择自己所需要的信息,而且可以通过展现出来的趋势预判会触发的阈值以达到提前发现风险的效果。原创 2024-02-20 10:30:06 · 724 阅读 · 0 评论 -
分布式服务链路监控以及报警方案
在这样的情况下,分布式链路监控的价值就体现出来了,它可以让你清晰地知道跨服务调用的链路耗时信息、执行方法等,并从整体到局部将信息呈现出来,可以帮助你节约故障排查时间。目前市面上的全链路监控工具很多,比如 CAT、SkyWalking、Pinpoint 等,对于工具的选型来说最重要的是采样数据对系统的性能消耗足够小、数据分析和展示快、监控的维度尽可能丰富,CAT:是由美团和携程的同学开发的,通过代码埋点的侵入式方式,对应用日志分析、监控、展示等,不过侵入式的方式会带来开发以及维护成本的增加。原创 2024-02-20 10:28:46 · 953 阅读 · 0 评论 -
命令行监控 Linux 服务器的要点
而应用需要内存时,如果没有可用的 free 内存,内核就会从缓冲区回收内存以满足要求,当 free 值很低的时候,如上代码中的 available 就能体现出缓冲区可用内存的大小,这个指标可以比较真实地反映出内存是否达到使用上限。在我看来,链路层是直接面向架构和代码的,它的监控能够帮助你更加准确地看到代码执行了哪些函数,涉及哪些服务,并且能够较为清晰地看到函数之间的调用耗时,还可以帮助你定位代码存在的问题。这个数值越高,说明用户进程消耗的 CPU 时间越多,可以用来分析代码中的 CPU 消耗热点。原创 2024-02-20 10:27:14 · 768 阅读 · 0 评论 -
如何制定一份有效的性能测试方案?
性能测试方案,通俗一点说就是指导你进行性能测试的文档,包含测试目的、测试方法、测试场景、环境配置、测试排期、测试资源、风险分析等内容。一份详细的性能测试方案可以帮助项目成员明确测试计划和手段,更好地控制测试流程。原创 2024-02-20 10:25:17 · 939 阅读 · 0 评论 -
性能测试场景的分类和意义
关于场景名字的叫法,不仅不同的公司会不一样,就包括参考资料上也没有形成非常统一的规范,但我认为并不需要用很多精力研究场景的叫法,但你一定要能描述清楚场景的核心目的是什么,执行步骤是什么,这才是需要向你的协作伙伴传递的最准确的信息。所以我们也会测试触发限流和熔断所设置的阈值,并观察在触发后的系统表现是如何的。根据我的经验,会在测试之前组内协商出场景异常情况下的停止条件,比如 CPU 达到 70%,响应时间超过 500 ms,接口正确率低于 99% 等,当触发这些条件时,我将不会继续加线程进行测试了。原创 2024-02-20 10:21:13 · 1324 阅读 · 0 评论 -
你真的知道如何制定性能测试的目标吗?
比如有的业务第一次在数据库请求到数据后,应用层本地缓存会将数据存储在应用服务器上,也就是接下来在缓存有效时间内不会再去数据库取数据,而是在应用层得到数据后就会直接返回,所以响应时间会比第一次低不少,这也是随着性能测试的进行响应时间变低的原因之一。流量复制是不能解决指标制定的问题的,并且在落地过程中还会花费大量的时间和人力成本,所以关于目标的制定和分析我们需要一步一步进行,花费一定的时间是难以避免的,并且线上未来的访问趋势只能尽可能覆盖,无法完全预测到。我们都明白在测试领域,提早发现问题修复成本是最低的。原创 2024-02-20 10:19:18 · 1038 阅读 · 0 评论 -
Nginx 在系统架构中的作用
举个例子,比如你很想到某公司去做测试,对方公司的测试主管并不认识你,你也不知道这位测试主管的联系方式,但是你的朋友小王认识,他帮你推荐了简历,此时的小王就起到代理的作用,相当于一个渠道。原创 2024-02-20 10:17:43 · 859 阅读 · 0 评论 -
如何基于 JMeter API 开发性能测试平台?
本专栏,我们应用的主要性能测试工具是 JMeter,那开发性能测试平台需要什么样的能力呢?,JMeter 本身是 Java 开发,提供了较多的接口,所以使用 Java 开发具备天然的优势;平台主要通过 Web 网页展示,需要具备较好的,目前 Vue 是比较流行的前端框架;,尤其是 JMeter 提供的相关 API。原创 2024-02-20 10:16:12 · 1079 阅读 · 0 评论 -
JMeter 二次开发其实并不难
BeanShell 是由 Java 编写的,相当于一个小巧的 Java源码解释器,简单来说就是你可以在里面写代码,然后通过 Beanshell 翻译成插件可以识别的指令去执行相关操作。为了让你能够系统地学习 Java Sampler 的编写,我将分为如下四部分来介绍。原创 2024-02-20 10:14:22 · 1235 阅读 · 0 评论 -
构建并执行 JMeter 脚本的正确姿势
如上图便是完成了实时压测情况下运行结果的实时展示图,你可以以此为基础,进行多接口的数据采集,相应增加脚本里的 Backend Listener 插件,区分不同的 application name 名称,你会看到不同的接口数据都进入 influxdb 数据库中。有的测试在编写脚本的过程中为了区分业务逻辑,会使用很多插件,比如 if 判断、循环, 这些插件虽然可以让你进入不同的业务场景,但会增加脚本的复杂度,影响发起压力的效率。从图中可以看到,命令行的方式直接产生了总的 TPS、报错和一些时间层级的指标。原创 2024-02-20 10:13:16 · 752 阅读 · 0 评论 -
JMeter 参数化策略
比如大促有 10w 用户会从获取不同的商品信息,而你的压测中并没有进行充分的参数化,此时用大量线程反复请求同一件商品,极有可能访问的是缓存数据。上面我介绍了参数化的意义以及常见用法,参数化对于性能测试是基础且必需的,因为在性能场景中,很多时候不进行参数化,脚本也是可以跑通的,所以有一些测试同学在这方面就会“偷工减料”,但这会造成性能数据不准确。:提取内容的正则表达式。关联是将上个请求的数据提取需要的部分放到下个请求中,通过关联我们可以获取到满足业务特性的不同数据,因此可以认为是一种特殊的参数化。原创 2024-02-20 10:12:19 · 964 阅读 · 0 评论 -
JMeter 的核心概念
性能测试有很多工具,JMeter、Loadrunner、Locust、nGrinder 都不乏粉丝。有人认为做性能测试重要的不是工具,是思想。但从学习实践的角度讲,工具在一定程度上决定了工作效率及协作模式。要成为一名测试专家,对工具一定是要精通的。JMeter 原生的方式只支持单点工作,团队成员并不能很方便地互相检查脚本和查看报告。如果我们想改变这样的协作方式,就要对 JMeter 进行改造。如果不了解工具,改造也就无从谈起。说了这么多,那我为什么会选择介绍 JMeter 呢?原创 2024-02-20 10:10:30 · 629 阅读 · 0 评论