前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >性能测试调优经验总结

性能测试调优经验总结

作者头像
Bruce Li
发布2019-07-30 16:56:23
9510
发布2019-07-30 16:56:23
举报

之前做过一些性能测试及调优相关的工作,也参加过相关的一些培训,想写一篇文章记录用过的一些工具和一些经验总结。

性能测试及调优对于一个大型系统有着即为重要的意义,大家可能都对每年双十一对阿里淘宝天猫的性能感到很惊叹,其实网上也有很多关于各种高并发网站的架构的介绍,有兴趣的同学可以上网查看。这里主要介绍一些性能测试工具以及个人对性能调优的一些总结。

我们在讨论性能的时候,其实往往需要指定一个量化的标准来衡量,通常叫做KPI,比如常见的平均一个request的返回时间,打开一个页面的平均等待时间,等等。通过对照性能测试结果和定义的KPI,才好决定调优的方向。

下面介绍一些用过的性能测试相关的工具:

jdk bin: jdk的bin目录下有很多16k大小的可执行文件,其中很多都是可以用作监控java进程的工具,比如jps,如果本地起了很多java进程,当通过任务管理器不知道哪个java进程是哪个的时候,可以通过jps命令查看detail信息,jmap,通过jmap可以做heap dump分析是否有内存溢出,jstack,通过jstack可以做thread dump分析死锁问题。

//bin目录图片,附解释

jconsole/jvisualvm: 这两个工具起初是开源项目,现在也集成到了jdk bin目录下,它们提供了一个图形化的界面监控java进程,包括本地进程和远程进程。通过这两个工具,可以对java内存模型有一个直观的认识。

//内存模型图

gatling: 这是一个基于scalar的性能测试工具,简单讲,这个工具主要用作对backend service模拟高并发的访问的场景,并且会有一个比较丰富详细的report。这个工具有一个standalone的GUI工具,可以生成基于scalar的测试案例脚本,对scalar有经验的同学也可以不依赖这个工具而手动写测试案例,通常,GUI工具有利于本地快速测试,而测试脚本往往用于自动化的持续集成环境。https://gatling.io/

jmeter: jmeter是一个使用非常广泛的开源项目,网上有很多相关的资料,这里不在赘述。这里想介绍一个tool taurus,通常原生jmeter生成的report比较丑并且对持续集成支持的不是很好,taurus就是这样一个封装了jmeter的工具。http://gettaurus.org/

jprofiler: 用上述工具做性能测试往往得到的是backend总体上的性能表现,比如说平均一个request的返回时间,那么对于backend处理这个request的逻辑每个方法具体执行的时间,对于开发人员调优代码有重要的意义,jprofier就能够达到这个目的。https://www.ej-technologies.com/products/jprofiler/overview.html

dynatrace: dynatrace可以监控应用程序从high level到detail方法执行时间级别的性能表现,相比jprofiler,dynatrace很适合对cloud应用的监控。https://www.dynatrace.com/

下面记录个人对性能调优的一些感悟:

数据库层

  • 创建有效的索引
  • 数据库连接池配置

Application层

  • 处理request请求的连接池配置

减少网络传输的时间

  • 配置CDN
  • 压缩js文件
  • 减少静态文件,比如合并多张图片成一张
  • 采取有效的缓存策略
  • 减少发送请求的次数
  • 异步

分布式

  • 单机系统的计算能力有限,采用分布式系统可以大大提高计算能力。个人认为这也是paas平台相较于iaas平台的一个很重要的功能,在paas平台上,load balance是一个开箱即用的功能。

代码逻辑实现

  • 其实以上都是一些配置,架构相关的优化,还有一个最重要的点就是代码实现逻辑的优化,真正减少时间复杂度。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 天马行空布鲁斯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
持续集成
CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档