美文网首页
谈谈压测

谈谈压测

作者: 玩家翁伟 | 来源:发表于2018-05-14 17:38 被阅读117次

面试的时候,很多后端或者QA的候选人都会跟我讲说有过压力测试的经验,但在我细问之后,极少有候选人能够把压力测试细节讲清楚。

这里整理一下我认为做压力测试时需要注意的一些细节。

环境

首先环境是非常重要的,需要尽可能跟生产环境靠近。

比方说,使用同样的nginx版本,php的话需要启用fpmzend-optimizer等等,参数配置也最好跟生产环境保持一致。

当然,php的版本更加需要保持一致,不能说线上是跑5.3,而测试环境却是php 7;除非是要测试不同php版本的性能。

网络也需要注意,测试机跟服务器之间是什么网络连接?100M还是千兆的网线?也同样需要跟生产环境尽可能保持一致。

我曾经看过有人直接在自己的笔记本上跑压测的客户端,然后笔记本使用的wifi;这直接就变成是在测试wifi的性能了。

当然,也可以考虑直接在服务器本机上面跑压测程序,这样就可以规避掉网络层的,更有针对的去看服务器应用的性能;但那就要注意压测程序本身是否会占用过多的CPU、内存等资源而影响到服务器应用。

在测试高并发的场景下,也要注意修改linux的open files limit:

ulimit -n

命令可以显示file descriptors的值,这值默认是1024;也就是说,最多只能开1024个并发连接;一般情况下够用。

如果需要测试C10K甚至更高的并发场景时,这个值就必须修改了;关于ulimit命令的详细使用,可以参考这里

工具

最常见的web压测工具是ab - apache benchmark;我偶尔会拿ab来做简单的快速测试。但做严格的测试时,ab就会显得非常不合适

首先,ab是单线程程序,只能利用单一CPU,在给性能好的服务器端应用做压测时,往往跑ab的测试机负荷满了;而服务器应用的性能还绰绰有余。

这在测试默认启用多核的go程序是非常常见的。

建议至少使用techempower所用的wrk替代ab;wrk默认可以利用单一CPU的多个核。

其次,ab仅能是对单一url进行压测,而当我们仅仅只是反复测试单一URL时,出来的测试结果往往不能提现真实的压力场景。

比方说,应用程序反复查询、返回同一个账号的资料,跟随机查询、返回十万个用户是不一样的;前者的返回结果很容易就被数据库、应用给“缓存”掉。而对于被严重“缓存”的性能测试结果,并不能很好的反应真实场景下的性能表现。

如果要模拟真实的压测场景,我会推荐使用siegesiege的有多个参数方便模拟真实压力场景:

  • -f FILE, --file=FILE参数指定一个输入文件,在文件中指定多个不同的url,然后对这多个url进行压测。
  • -i, --internet则是指定随机发送输入文件中的url

wrk也支持使用lua脚本去生成压测的请求,siege上面能做的,wrk肯定也可以通过自己编写脚本去实现。

瓶颈

我会认为,压测的目的是在于找到系统的瓶颈,一定是要确定系统某个方面达到瓶颈了,压力测试才算是基本完成。

当我们说系统可以支撑某某压力时,一定要同时能够清楚的说出系统的瓶颈是在哪里;也就是说,当瓶颈得到改善的时候,系统的性能可以得到提高。

对于web应用,系统的瓶颈往往会是数据库;系统满负荷运作的时候,数据库的CPU或者是磁盘IO是否跑满了?

如果没有,那么很可能是说明瓶颈是在别的地方;如果是在应用,那么应用服务器的CPU、内存、IO等等也应该有所体现。

找到系统的瓶颈,是需要反复做不同测试、优化,然后分析出来的。

对于一些性能有高要求的公司,比方说七牛云,据说他们只接受网络IO这一瓶颈,压测的时候,是一定要把千兆网卡跑满,才算是性能达标;如果网卡没跑满,那就说明瓶颈是在别的地方,要去不断优化,直到网卡的物理限制成为系统的瓶颈。

延迟与吞吐

延迟latency与吞吐thoughput,是两个相关,但其实独立的概念。

最理想的系统是低延迟,高吞吐;但有时高延迟的系统,吞吐是可以超过低延迟的系统的。

最后

偶已经离开一线开发好几年,上述都是根据我差不多5年前的记忆写的,一定会有错漏之处,还望读者指正哈!问天这里先谢过大家。

相关文章

  • 谈谈压测

    面试的时候,很多后端或者QA的候选人都会跟我讲说有过压力测试的经验,但在我细问之后,极少有候选人能够把压力测试细节...

  • 谈谈压测

    目的 验证单个业务及整个的处理能力及响应时间等 验证系统的性能瓶颈 做容量规划 分类 单接口压测 全链路压测 性能...

  • 性能压测学习大纲

    一、压测的目的 二、压测的完整流程 三、压测场景分析/组织测试脚本 四、压测数据准备 五、压测指标监控 七、压测结...

  • 压测tips

    压测前: 明确压测的目的,观测指标; 准备好压测方案,几组case,case分别压测多久; 申请压测环境,告知进行...

  • 阶梯压测

    今天我们来浅谈一下阶梯压测,那么,什么是阶梯压测,什么时候做阶梯压测,阶梯压测和普通压测又有什么区别呢?阶梯压测:...

  • 02_压测流程步骤

    做压测的时候,首先我们得知道压测需求!大部分都是有压测指标的,只要能达到指标就算完成任务! 选择压测工具,编写压测...

  • 流量录制,基于常态化压测

    简介 常态化压测、业务压测、集群压测、全链路压测、等基于特定需求的对后台接口进行的并发式请求,接口自动化压测数据的...

  • 提升cpu使用率

    如何优化压测工具发压能力 -- 提升cpu使用率 压测工具工作流程 压测工具一般在性能压测过程中用于对被压的系统产...

  • go实现的压测工具【单台机器100w连接压测实战】

    本文介绍压测是什么,解释压测的专属名词,教大家如何压测。介绍市面上的常见压测工具(ab、locust、Jmeter...

  • go 实现的压测工具,ab、locust、Jmeter压测工具介

    本文介绍压测是什么,解释压测的专属名词,教大家如何压测。介绍市面上的常见压测工具(ab、locust、Jmeter...

网友评论

      本文标题:谈谈压测

      本文链接:https://www.haomeiwen.com/subject/ugpjdftx.html