导言
能做好性能测试人的本事最主要也不是在如何熟练的使用LoadRunner,或者JMeter,主要的是对系统的理解和掌控,一种大局观。
常见性能指标
吞吐量(TPS, QPS):简单来说就是每秒钟完成的事务数或者查询数。通常吞吐量大表明系统单位时间能处理的请求数越多,所以通常希望TPS越高越好
响应时间:即从请求发出去到收到系统返回的时间。响应时间一般不取平均值,而是要去掉不稳定的值之后再取均值,比如常用的90%响应时间,指的就是去掉了10%不稳定的响应时间之后,剩下90%的稳定的响应时间的均值。从聚类的观点看,其实就是去掉离群点。
错误率:即错误请求数与总请求数之比。随着压力增加,有可能出现处理请求处理不过来的情况,这时错误数会不断增加。
三者有极大的关联,任何孤立的数据都不能说明问题。典型的关系是,吞吐量增加时,响应延迟有可能增加,错误率也有可能增加。因此,单拿出一个10w的TPS并不能说明问题。
性能调优的思路
一般情况,调优需要有个前提条件,即无论是用线上的真实流水还是线下的压力测试让问题扩大化,明显化。
根据这些比较明显的现象去初判问题,收集证据去验证初判结果成立,然后分析现象产生的原因,并尝试解决问题。
1、性能摸底测试
对于新上的系统或者是有过较大代码改动的系统来说,做一次摸底测试还是很有必要的。
-
-
搞清楚系统的极限TPS是多少
-
在压力上来时有没有暴露一些错误或者问题
-
系统大致的资源占用情况是什么
-
系统可能的性能瓶颈在哪。
-
2、定义性能优化的目标
性能优化的目标一般是吞吐量达到多少,90%响应时间小于多少,错误率小于多少。同时还需要关注其他的性能指标,cpu使用情况,内存使用情况,磁盘使用情况,带宽使用情况等。
可以很灵活,但目标要明确。
3、分析
分析性能问题原因,及解决方案。
4、优化并重新测试验证
性能调优思路 http://www.voidcn.com/blog/bigtree_3721/article/p-5786972.html
linux下性能监控命令 Linux工具进阶 — Linux Tools Quick Tutorial
关于JVM CPU资源占用过高的问题排查 关于JVM CPU资源占用过高的问题排查 - Less is More - OSCHINA - 中文开源技术交流社区
java排查工具 http://my.oschina.net/feichexia/blog/196575
jvm参数调优 http://www.cnblogs.com/java-zhao/archive/2016/02/08/5185092.html
java linux系统调优工具 IBM Developer
性能优化的思路和步骤 性能调优指南--计算机系统Java应用程序V0.1-java-火龙果软件工程
性能调优攻略 性能调优攻略 | 酷 壳 - CoolShell
JVM性能调优入门 JVM性能调优入门 - 简书
JVM性能调优 JVM性能调优-CSDN博客
Tomcat性能优化 文章-阿里云开发者社区-云计算社区-阿里云
Java应用线上问题排查的常用工具和方法 Hesey's Memo
调优历程: 我是怎样将一个系统的性能提高20倍的? 调优历程: 我是怎样将一个系统的性能提高20倍的?
HSF的性能优化 经历400多天打磨,HSF的架构和性能有哪些新突破?
性能测试常见种类与目的
1、负载测试 (Load testing)
目的是发现系统当前的性能瓶颈,负载测试是不断增加系统的负载,直到负载达到阈值——评估系统在预期工作负载下的性能测试。
通常可以定义为一种性能测试,通过模拟不同工作负载确定软件系统性能能力的活动。其采用的方法是通过不断的增加系统压力,来验证系统各项性能指标的变化情况,知道出现“性能拐点”,即某个性能指标出现不满足事先约定的指标阈值。典型的负载测试包括在负载测试过程中确定响应时间,吞吐量,误码率等。
该方法可以找到系统的处理极限,可以为性能调优提供依据,同时还可以为确定相同容量提供参考。该类方法通常要基于或模拟系统真实运行环境,且选取的典型业务场景也要与实际情况相同或接近。
2、压力测试 (Stress testing)
目的是验证系统在极端情况下的可靠性
可以定义为一种性能测试,通过模拟极限负载获得系统所能提供的最大服务级别的活动。通常该类测试的前提是使得系统已处于一种饱和状态,压力测试是指当硬件资源如cpu、内存、磁盘空间等不充足时对软件稳定性的检查。比如CPU利用率已达到85%以上,内存利用率已超过70%等等。在此前提下再继续给系统增大负载,观察系统的性能表现,是否出现拒绝服务、系统宕机等严重的异常。
这种测试一般辅助于系统故障定位、考察系统的稳定性等工作。
3、并发测试 (Concurrent testing)
通常情况说的性能测试就是这里的并发测试。目的是发现代码中数据结构,算法或者数据库脚本中存在的问题
并发测试通常分为广义的并发和狭义的并发。其中广义的并发可以理解为多个用户同时操作不同的功能,而狭义的并发可以理解为多个用户同时操作同一个功能。通常用于验证系统处理死锁、资源争用的能力。因此,通常伴随着负载和压力测试同时开展。当然,也有单独对某个特殊的功能进行并发测试。
4、疲劳测试 (Fatigue testing)
目的是验证系统长时间运行的稳定性,例如可以测试系统是否存在内存泄露等
疲劳测试一般用于考察系统的稳定、可靠性。因此,可以定义为一种性能测试,在某一特定环境下,通过模拟一定数量的用户持续较长时间连续使用或访问系统,确定系统长时间运行稳定性的活动。根据经验,它一般与压力测试配合进行,综合验证系统在一定压力下,长时间运行的稳定情况