jmeter性能分析

我的上一篇文章描述了如何使用JMeter完成异步REST / HTTP服务的压力测试或负载测试。 但是,运行这样的测试通常表明被测系统不能很好地应对增加的负载。 现在的问题是如何找到瓶颈?

深入研究代码以检测可疑部分可能是一种替代方法。 但是考虑到潜在的巨大代码库,因此考虑到瓶颈隐藏1的众多可能性,这看起来似乎不太有希望。 幸运的是,有一些工具可以在遥测2的基础上提供有效的分析功能。 记录和检查此类测量值通常称为概要分析,而本博文则介绍了如何使用Yourkit 3进行此操作。

首先,我们推出我们的SUT( 体系ü的nDer 牛逼 EST),并使用JMeter的建立系统的负荷。 为此,JMeter可能执行一个测试方案,该方案模拟了多个用户向SUT发送大量请求的情况。 在测试场景中定义的测试计划 。 后者可能包含侦听器 ,这些侦听器允许捕获请求的执行时间并提供统计信息,例如最大/最小/可用性请求持续时间,偏差,吞吐量等。 这就是我们检测到系统扩展性不佳的方式…

在发现之后,我们使Yourkit可以检索遥测。 因此,SUT的VM由特殊的探查器代理启动。 探查器工具提供了多个视图,这些视图允许实时检查CPU利用率,内存消耗等。 但是,要全面分析例如SUT在负载下的性能,Yourkit需要通过所谓的快照捕获代理提供的CPU信息。

建议在单独的计算机上运行SUT,JMeter和Yourkit,以避免篡改测试结果。 在同一台机器上运行例如SUT和JMeter可能会降低吞吐量,因为JMeter线程可能会消耗大量可用的计算时间。

考虑到此设置,我们将介绍一个概要分析会话的小示例。 以下代码段是我们用作SUT的基于JAX-RS的服务4的摘录。

@Path( '/resources/{id}' )
public class ExampleResourceProvider {private List<ExampleResource> resources;[...]@Override@GET@Produces( MediaType.TEXT_PLAIN )public String getContent( @PathParam( 'id' ) String id ) {ExampleResource found = NOT_FOUND;for( ExampleResource resource : resources ) {if( resource.getId().equals( id ) ) {found = resource;}}return found.getMessage();}

该服务在ExampleResource实例列表中执行查找。 ExampleResource对象只是将标识符映射到以String表示的消息。 找到给定标识符的消息将返回。 在使用GET请求调用服务时,您可以使用浏览器测试结果:

出于演示目的,服务的粘合代码以无序方式初始化了500000个元素的列表。

一旦运行了SUT,就可以使用JMeter在负载下设置它。 该测试计划一次执行大约100个并发请求。 如下图所示,平均请求执行时间约为1秒。

Yourkit在JMeter测试计划执行期间记录的CPU遥测揭示了请求执行时间长的原因。 选择配置文件快照的“ Hot spots选项卡,将显示列表迭代消耗了约72%的CPU利用率。 查看列出了所选热点方法的调用者树的Back Traces视图,我们发现示例服务方法导致列表迭代。

因此,我们在下一步中更改服务实现,以对有序列表使用二进制搜索进行ExampleResource查找。

@Override@GET@Produces( MediaType.TEXT_PLAIN )public String getContent( @PathParam( 'id' ) String id ) {ExampleResource key = new ExampleResource( id, null );int position = Collections.binarySearch( resources, key );return resources.get( position ).getMessage();}

之后,我们重新运行JMeter测试计划:

现在平均请求大约需要3毫秒,这是一个很大的改进。

查看相应的CPU性能分析会话的Hot spots ,可以确认由我们的方法引起的瓶颈已经消失。

诚然,以上示例中的问题似乎非常明显。 但是我们在生产代码中发现了一个非常相似的代码,它隐藏在系统的深度中(可惜……)。 重要的是要注意,在开始压力和负载测试之前,问题并没有变得很明显5

我想我们在找到原因之前(如果有的话)将花费大量时间手动检查代码库。 然而,剖析会议直接将我们指向所有邪恶的根源。 通常情况下,实际问题并不难解决。 因此,概要分析可以帮助您更有效地处理一些工作。

至少它对我有用-顺便说一下-这也很有趣

  1. 请注意,导致瓶颈的代码也可能属于第三个库。 ↩
  2. 当我现在在一个客户项目中进行这种分析时,我想到了写这篇文章的想法↩
  3. 我在这里没有做任何工具广告或评级-我只是使用我熟悉的工具来提供一个更抽象的概念的可复制示例。 市场上有很多更好的工具可以满足您的需求↩
  4. 请注意,本文中的代码片段的唯一目的是作为如何查找和解决性能瓶颈的示例。 片段编写得很差,不应以任何方式重复使用! ↩
  5. 根据我的经验,新创建的代码库包含其中的一些块是很常见的。 因此,有这样的测试是必须的,以便找到性能问题的顾客发现他们在生产之前... ↩

参考:我们的JCG合作伙伴 Frank Appel在Code Affine博客上通过JMeter和Yourkit对REST / HTTP服务进行了性能分析 。

翻译自: https://www.javacodegeeks.com/2012/11/performance-analysis-of-resthttp-services-with-jmeter-and-yourkit.html

jmeter性能分析

jmeter性能分析_使用JMeter和Yourkit进行REST / HTTP服务的性能分析相关推荐

  1. 使用JMeter和Yourkit进行REST / HTTP服务的性能分析

    我的上一篇文章描述了如何使用JMeter完成异步REST / HTTP服务的压力测试或负载测试. 但是,运行这样的测试通常表明被测系统不能很好地应对不断增加的负载. 现在的问题是如何找到瓶颈? 深入研 ...

  2. jmeter性能测试报告_用 JMeter 做接口测试的优劣浅析

      2018年由软件质量报道做的调查报告表明,受调查的测试人员中约有40.67%的人使用JMeter作为接口测试的自动化测试工具(排在商业化或者开源工具中的第一),剩下的为Postman(28%),以 ...

  3. jmeter进行性能测试_使用JMeter进行性能测试

    jmeter进行性能测试 在开发复杂的高可用性软件项目时,性能至关重要. 在当今这样的时代尤其如此,除了闪电般的实时数据可访问性之外,其他任何事情都受到惩罚. 当谈论有时需要的大量数据时,这并非总是一 ...

  4. jmeter 加密解密_使用Jmeter对SHA1加密接口进行性能测试

     机会只留给那些有准备的人 改变能改变的,接受不能改变的,就是进步 性能测试过程中,有时候会遇到需要对信息头进行加密鉴权,下面我就来介绍如何针对SHA1加密鉴权开发性能测试脚本  1.首先了解原理,就 ...

  5. jmeter csv参数化_运用Jmeter参数化来实现接口自动化测试

    本文记录如何使用Jmeter参数化(csv)实现接口自动化--测试Token不同入参情况下,接口请求能够返回正确的结果 1. 首先需要使用Jmeter获取一个Token,如何获取暂略(同一般访问请求方 ...

  6. jmeter压力测试_用Jmeter实现对接口的压力测试

    一.多个真实用户对接口的压力测试 1. 获取多个真实用户的token的两种方法: 1)第一种:让开发帮忙生成多个token(多个用户账户生成的token),导出为csv格式的文件(以下步骤均以该方法为 ...

  7. jmeter java 关联_使用Jmeter进行数据关联和并发用户

    这是Naresh . 似乎这个博客对初学者和所有人都非常有帮助 . 我选择了Jmeter for Perf . 测试基于Web的应用程序,它是用环境构建的 - Microsoft dot net(带有 ...

  8. python后台开发性能问题_《Python高性能编程》——2.14 确保性能分析成功的策略-阿里云开发者社区...

    本节书摘来自异步社区<Python高性能编程>一书中的第2章,第2.14节,作者[美] 戈雷利克 (Micha Gorelick),胡世杰,徐旭彬 译,更多章节内容可以访问云栖社区&quo ...

  9. sklearn 相关性分析_人工智能和大数据的骨架支点—— 机器学习之相关性分析

    内容架构: 第一部分:简单线性回归 第二部分:如何用逻辑回归分类 第三部分:kaggle和泰坦尼克号预测 第一部分:简单线性回归 一.机器学习(Machine Learning, ML) 是机器学习算 ...

最新文章

  1. Java内存溢出详解之Tomcat配置
  2. pandas使用datetime创建示例dataframe:包含完整的时分秒信息、创建时间索引、使用不同的时间频率、date_range中参数freq的偏移量别名
  3. 函数参数传递常用的三种方式
  4. 已选商品数量总计如何实现_英国VAT新政临近,没有API如何添加或修改税率?教程来了!...
  5. 参数签名ascii码排序的坑
  6. java 注解默认值
  7. Java使用表格显示日历编程_用java图形用户界面实现: 编写一个日历程序,能实现显示日历等简单功能。...
  8. SQL Server 2005存储过程示例
  9. 微信小程序获取 openid
  10. 06-输出100以内的素数
  11. 钽电容正负极_钽电容是什么?怎么区分正负极?
  12. 查看mysql中SQL的执行计划
  13. windows下仿Mac Dock软件MultiDock
  14. Windows 下的 Vim 编程
  15. Leetcode#183. Customers Who Never Order
  16. 发现ramnit样本一枚
  17. 网站降权根服务器有关系吗,导致网站降权或被k的原因有哪些?
  18. kafka一些常用命令,以及如何查看消息被谁消费了
  19. LeetCode 第7题:整数反转(Python3解法)
  20. 如何备考高级软考的系统架构设计师?

热门文章

  1. 写给工程师的10条精进原则
  2. SpringCloud配置中心内容加密
  3. oracle笔记整理2
  4. React中的方法调用
  5. EasyExcel(笔记)
  6. Mybatis中使用Dao实现类实现增删改查【实际开发中使用代理dao】
  7. mysql加索引快很多
  8. flask执行python脚本_如何在flask后端运行python脚本?
  9. jdk内置线程实例_EA问题的JDK14实例
  10. 查看oracle会话和进程_带有Oracle Digital Assistant和Fn Project的会话式UI