ab 无疑是目前最常见的压力测试工具。其典型用法如下:
shell> ab -k -c 100 -t 10 http://domain/path
其中,参数「c」表示的是并发,
参数「t」表示的是整个测试持续的时间。
一个很容易被忽视的参数是「k」,它会增加请求头 Connection: Keep-Alive,相当于开启了 HTTP 长连接,这样做一方面可以降低测试服务器动态端口被耗尽的风险,另一方面也有助于给目标服务器更大的压力,测试出更接近极限的结果。
再来说说 wrk:
wrk 相对于 ab 来说最大的优点是它支持多线程,这样更容易发挥多核 CPU 的能力,从而更容易测试出系统的极限能力,其典型用法如下:
shell> wrk -c 100 -d 10 http://domain/path
其中,参数「c」表示的是并发,参数「d」表示的是整个测试持续的时间。此外,可以通过参数「t」来控制线程数(缺省值为 2),实际使用中可以视情况酌情增大。
如果顺着 ab 的使用惯性,你可能会纳闷为什么 wrk 没有类似参数「k」这样打开 HTTP 长链接的选项,这是因为 wrk 使用的是 HTTP/1.1,缺省开启的是长连接,而 ab 使用的是 HTTP/1.0,缺省开启的是短链接。
不过这也引出另一个问题,如何用 wrk 测试短链接?实际上很简单:
shell> wrk -H "Connection: Close" -c 100 -d 10 http://domain/path
也就是说通过参数「H」传递一个自定义的 Connection 请求头来关闭长链接。此外,wrk 支持自定义脚本编程,不过相对较复杂,本文略过不谈。
最后说说 locust:
locust 相对于 ab、wrk 来说最大的优点是它不再只是测试一个 url,而是可以测试一个自定义的场景,其中可以包含多个有相互关联的 url,此外,它还是分布式可扩展的,可以模拟大量用户的访问,由此可以得到更贴近真实环境的测试数据。
关于 locust 的具体用法有点复杂,大家可以自行查阅官方文档
其它
除了 ab,wrk,locust 等压力测试工具之外,还有很多其它选择,其中比较有代表性的是 GoReplay 和 TcpCopy,它们的特殊之处在于可以拷贝线上服务器的真实流量并转发到测试服务器上去,也就是说,用真实流量来测试,如此得到的数据无疑是更可信的。不过它们的用法更复杂,大家记得有类似需求的时候去哪找就行了。
说了这么多压力测试工具,结尾我想说说压力测试过程中一些注意事项:首先,在使用 ab 或者 wrk 的时候,最好在同一个局域网里独立的服务器上运行它们,因为这些压力测试工具本身也会消耗系统资源,所以如果直接在目标服务器上运行它们,那么测试的结果会有偏差;其次,即便使用了长连接,那么也应该注意端口 TIME_WAIT 问题,视情况可能需要在 sysctl 配置中开启 tcp_tw_recycle 或 tcp_tw_reuse 之类的选项;
最后,在压力测试过程中,最好时刻留意哪些资源成为了瓶颈,比如:CPU 是不是跑满了,IO 是不是跑满了,带宽是不是跑满了等等,如果什么都没跑满,但是压力测试结果却上不去,那么就需要反思一下是不是压力测试工具使用方法有误,或者是不是在 off-CPU 上消耗了太多时间,只有知道了瓶颈在哪,才能突破系统的极限。
参考:

压力测试工具ab,wrk,locust简介的更多相关文章

  1. Apache自带压力测试工具ab用法简介

    ab命令原理 ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问.它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx.lighthttp ...

  2. 压力测试工具ab及centos下单独安装方法

    压力测试工具Ab简介 Apache安装包中自带的压力测试工具 Apache Benchmark(简称ab) 简单易用,这里就采用 ab作为压力测试工具了. 1.独立安装 ab运行需要依赖apr-uti ...

  3. Apache中压力测试工具ab的操作说明

    1.压力测试工具ab(ApacheBench)的简单说明 1)     网站性能压力测试是性能调优过程中必不可少的一环.只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题.Apache中有个 ...

  4. apache自带压力测试工具ab的使用及解析

    当你搭建了apache服务器并在上面部署了web网站,在网站运行前,为了使apache服务器的性能得到更好的应用,我们可以先对其进行压力测试.进行压力测试其实非常简单,我们也不用再额外下载安装什么测试 ...

  5. httpd的压力测试工具-ab工具使用案例

    httpd的压力测试工具-ab工具使用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.httpd自带的工具程序 事实上,在我们安装完Apache之后,它默认就会给我们安 ...

  6. 压力测试工具Ab简介

    Apache安装包中自带的压力测试工具 Apache Benchmark(简称ab) 简单易用,这里就采用 ab作为压力测试工具了. 1.独立安装 通过 yum-utils中的yumdownload  ...

  7. 压力测试工具ab使用

    ab全名是apache bench,是apache自带的一款压力测试工具.它通过创建多个线程来模拟并发,测试目标是基于URL的,因此不论是什么web服务器都可以支持. 使用ab非常简单,进入apach ...

  8. linux下web压力测试工具ab使用及详解

    APACHE自带的测试工具AB(apache benchmark).在APACHE的bin目录下.格式: ./ab [options] [http://]hostname[:port]/path参数: ...

  9. 压力测试工具 ab

    ab 是Apache 自带的一个压力测试工具,命令行,是 ApacheBench 命令的缩写. ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问.它的测试目标是基 ...

随机推荐

  1. ubuntu14.04 python + opencv 傻瓜式安装解决方案

    ubuntu14.04  python + opencv 傻瓜式安装解决方案 ubuntu下使python和opencv来做开发的话,总要花那么点时间来配置环境.我偶然间发现了一种傻瓜式安装办法希望快 ...

  2. 你能说出SQL聚集索引和非聚集索引的区别吗?

    最近突然想起前一阵和一朋友的聊天,当时他问我的问题是一个非常普通的问题:说说SQL聚集索引和非聚集索引的区别. AD:WOT2015 互联网运维与开发者大会 热销抢票 其实对于非专业的数据库操作人员来 ...

  3. poj 1269 判断直线的位置关系

    题目链接 题意 判断两条直线的位置关系,重合/平行/相交(求交点). 直线以其上两点的形式给出(点坐标为整点). 思路 写出直线的一般式方程(用\(gcd\)化为最简), 计算\(\begin{vma ...

  4. C++11学习笔记(5) —— override and final (转)

    原文转自 http://blog.csdn.net/fire_lord/article/details/8540592 1.简介 C++为我们提供了继承和虚函数的重写特性. 在派生类中,重写虚函数不强 ...

  5. linux内核设计与实现第一章

    1.1 unix的历史 Thompson实现unix 伯克利大学对其进一步开发推出了著名的BSD 其他各大厂商相继推出自己的unix 1.1.2 unix的特性 unix系统是一个强大,健壮,稳定的操 ...

  6. PHP连接MySQL报错"No such file or directory"的解决办法

    好下面说一下连接MYSQL数据库时报错的解决办法. 1,首先确定是mysql_connect()和mysql_pconnect()的问题,故障现象就是函数返回空,而mysql_error()返回“No ...

  7. Larevel5.1 打印SQL语句

    Larevel5.1 打印SQL语句 为了方便调试,开发时需要打印sql. 方法一(全局打开): SQL打印默认是关闭的, 需要在/vendor/illuminate/database/Connect ...

  8. BZOJ 3309 莫比乌斯反演

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3309 题意:定义f(n)为n所含质因子的最大幂指数,求 $Ans=\sum _{i=1} ...

  9. CodeForces - 600F Edge coloring of bipartite graph

    Discription You are given an undirected bipartite graph without multiple edges. You should paint the ...

  10. C# 将 WebService 封装成动态库

    C# 将 WebService 封装成动态库 服务与服务之间的远程调用,经常会通过Web Service来实现,Web Service是支持跨语言调用的,可以是java调用c++或c#调用java等, ...