原创 Bruce 天马行空布鲁斯 2018-06-27
以前作过一些性能测试及调优相关的工做,也参加过相关的一些培训,想写一篇文章记录用过的一些工具和一些经验总结。html
性能测试及调优对于一个大型系统有着即为重要的意义,你们可能都对每一年双十一对阿里淘宝天猫的性能感到很惊叹,其实网上也有不少关于各类高并发网站的架构的介绍,有兴趣的同窗能够上网查看。这里主要介绍一些性能测试工具以及我的对性能调优的一些总结。java
咱们在讨论性能的时候,其实每每须要指定一个量化的标准来衡量,一般叫作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/ide
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层
减小网络传输的时间
配置CDN
压缩js文件
减小静态文件,好比合并多张图片成一张
采起有效的缓存策略
减小发送请求的次数
分布式
代码逻辑实现