性能测试

系统性能定义

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

image.png

两者的关系:

  • throughput越大,Latency越差。因为请求过多,系统繁忙,自然响应速度会降低。
  • latency越好,能支持的Throughput越高。latency短说明系统处理速度快,自然便可以处理更多的请求。

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

  • 首先,需要定义Latency这个值。这个值的意义不是普适性的,需要根据不同的业务来定义,比如一些实时系统,需要的latency便会很短,如5ms。
  • 其次,开发性能测试工具。一个用来制造高强度的Throughput,另一个用来监测latency。对一个工具可以用很多现有开源的或者商业的。
    latency可以通过在代码中打日志测量,但是会影响到程序的执行,而且也只能看到代码内部的latency,无法计算到线上系统的。对于网络延迟可以使用一些抓包工具。
  • 最后,开始性能测试。不断的调整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%的请求均小于某值,在测试过程中,应该重点关注这样的数据结果。

常见系统瓶颈

代码调优

  • 类型转换。
    之前在3.x的设备指纹中,出现过严重的性能下降问题,后来定位发现,是在类型转换时用了fastjson的一个方法,导致系统时间大量的耗在上面了。
  • 异步操作。有些同步操作,会非常影响性能,尤其在网络较差的情况下,很可能阻塞我们的业务。使用异步,可以提升性能但是会带来编码上的复杂性。异步下的状态通知通常是个问题,比如消息事件通知方式,有回调方式等,这些方式同样可能会影响性能。但是通常来说,异步操作会让性能的吞吐率有很大提升(Throughput),但是会牺牲系统的响应时间(latency)。
    现在4.5的设备指纹中,便将以前的同步日志改成了异步写日志。
  • IO模型调优
    之前在学习netty的过程中,了解了几种不同的网络IO模型,这个需要根据自己的业务情况选择合适的IO模型。

系统调优

  • 多核CPU调优。之前在使用mongo的时候,每次进入mongo shell ,总是会打印几串warning,由于平时是只看error忽略warning的,就没太在意。后来线上性能除了问题,才注意看了那几个warning。其中一个就是NUMA。
    NUMA技术(Non-Uniform Memory Access)。
    NUMA的相关策略:
  1. 每个进程(或线程)都会从父进程继承NUMA策略,并分配有一个优先node。如果NUMA策略允许的话,进程可以调用其他node上的资源。
    简单点说,在有多个物理CPU的架构下,NUMA把内存分为本地和远程,每个物理CPU都有属于自己的本地内存,访问本地内存速度快于访问远程内存,缺省情况下,每个物理CPU只能访问属于自己的本地内存。对于MongoDB这种需要大内存的服务来说就可能造成内存不足

网络调优

  • TCP调优
    TCP链接一是会占用文件描述符,另一个是会开缓存,一般来说一个系统可以支持的TCP链接数是有限的,TCP链接对系统的开销是很大的。正是因为TCP是耗资源的,所以对于TCP的链接数量需要关注。当过多时,很可能大量消耗资源导致系统无响应。之前线上反馈,服务端的链接数过多,后来排查发现,是因为安卓sdk使用了HTTP1.1,默认开启的是keepalive长连接导致的链接不释放。
    所以,我们要注意配置KeepAlive参数,这个参数的意思是定义一个时间,如果链接上没有数据传输,系统会在这个时间发一个包,如果没有收到回应,那么TCP就认为链接断了,然后就会把链接关闭,这样可以回收系统资源开销。(注:HTTP层上也有KeepAlive参数)对于像HTTP这样的短链接,设置一个1-2分钟的keepalive,这可以在一定程度上防止DoS攻击。
    数据库调优
    传统的关系型数据库不太了解,对于NOSQL数据库,例如mongodb,需要关注索引的情况。之前在测试设备指纹的时候,便出现了系统性能越跑越慢的情况,后来发现是索引建立不全导致的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容