性能测试

2017-06-15  本文已影响334人  adonisjph

系统性能定义

1.Throughtput,吞吐量。每秒钟可以处理的请求数,任务数。
2.Latency,系统延迟。系统在处理一个请求或一个任务时的延迟。

image.png

两者的关系:


要说明一个系统的性能,便需要收集系统的Throughput和Latency两个值。

定位性能瓶颈

当在测试过程中,发现性能有问题时,不用急于去怀疑代码。首先要查看操作系统的报告,查看OS的cpu使用率,内存使用率,查看系统IO和网络的IO,网络连接数。通过观察以上数据,基本可以判断出性能问题出在哪。

  1. CPU使用率。如果使用率不高,但是Throughput和latency上不去,说明我们的程序没有忙于计算,而是干了别的事情,比如IO。
  2. 然后可以看下IO大不大,IO和CPU一般反着来,CPU利用率高则IO低,IO大则CPU小。IO看三个点,磁盘文件IO,驱动程序的IO,内存换页率。
  3. 查看网络带宽状态。
  4. 如果CPU不高,IO不高,内存使用不高,网络带宽使用不高,但是系统性能上不去,说明程序可能有问题。比如程序被阻塞,或者是一些数据库的索引未建立。

性能测试结果的分析:
结合jmeter的测试报告

image.png
上图是一个jmeter的测试报告,在报告中,有平均响应时间和90%,95%,99%的响应时间。
首先给结论:平均值不靠谱
再来说说为什么,在进行性能测试时,得到的结果数据不会都一样,而是有高有低。例如测试了10次,有9次都是1ms,但是第十次的时间是2s,那么平均值就是200.9,很明显这个并不能正确反映我们系统的性能。这个2s,应该作为一个异常值去除掉。就好像体育比赛一样,很多项目评委打分时,是需要去掉一个最高分和最低分的。
设备指纹4.x的版本中,js集成在server中,当页面集成了js时,需要先下载js,然后才是使用js拿到设备指纹。第一次下载后,js便会缓存在本地,方便以后调用就不需要每次都去下载js了。
而下载js便会受到网络的影响。在测试时,经常下载js会达到秒级。所以在性能测试时,需要将下载js的这个动作不纳入统计中。
正确的统计是使用百分比分布统计
然后继续看上面的图,99%Line
这个就是表示99%的请求均小于某值,在测试过程中,应该重点关注这样的数据结果。

常见系统瓶颈

代码调优

系统调优

  1. 每个进程(或线程)都会从父进程继承NUMA策略,并分配有一个优先node。如果NUMA策略允许的话,进程可以调用其他node上的资源。
    简单点说,在有多个物理CPU的架构下,NUMA把内存分为本地和远程,每个物理CPU都有属于自己的本地内存,访问本地内存速度快于访问远程内存,缺省情况下,每个物理CPU只能访问属于自己的本地内存。对于MongoDB这种需要大内存的服务来说就可能造成内存不足

网络调优

上一篇下一篇

猜你喜欢

热点阅读