性能测试工具

  • 压力测试工具
    • Grinder:http://grinder.sourceforge.net/
    • PTP自动化性能测试平台: [内部平台]
    • Jmeter: http://jmeter.apache.org/
    • Gatling: http://www.infoq.com/cn/articles/new-generation-server-testing-tool-gatling
    • Garrosh: https://git.hz.netease.com/qaperf/garrosh
    • wrk: http://github.com/wg/wrk
  • Java性能分析工具
    • VisualVM: https://visualvm.java.net/
    • BTrace:https://kenai.com/projects/btrace
    • byteman: http://byteman.jboss.org/
    • Jprofile: http://www.ej-technologies.com/products/jprofiler/overview.html
  • 服务器基准工具
    • Netperf: http://www.netperf.org/netperf/
    • FIO:N http://freecode.com/projects/fio
    • SPEC CPU: https://www.spec.org/cpu2006/
  • 其他工具
    • Tcpcopy: https://code.google.com/p/tcpcopy/
    • perf: https://perf.wiki.kernel.org/index.php/Main_Page
    • valgrind:http://valgrind.org/
    • blktrace:http://www.cse.unsw.edu.au/~aaronc/iosched/doc/blktrace.html
    • systemtap: https://sourceware.org/systemtap/wiki

压力测试工具

Grinder:http://grinder.sourceforge.net/

Grinder是一个开源的Java负载测试框架,它通过很多负载注射器来为分布式测试提供了便利。支持用于执行测试脚本的Jython脚本引擎HTTP测试可通过HTTP代理进行管理。
Grinder的特点:

  1. Grinder是开源性能测试工具,纯Java开发
  2. 脚本语言用Jython编写,脚本编辑的界面不友好,但是脚本编写比较灵活,上手相对困难。
  3. 可以支持参数化和关联操作。
  4. 其脚本录制功能也可以录制dwr请求。
  5. 支持分布式负载,测试过程中没有提供对服务器的监控方式。
  6. 可以运行在window和liunx环境。
    工具使用:http://doc.hz.netease.com/pages/viewpage.action?pageId=37318135

PTP自动化性能测试平台: [内部平台]

PTP致力于将性能测试过程自动化的平台。
PTP平台的特点:

  1. PTP平台底层支持多种压测工具,Grinder、Jnuts、Cosbench,及用户自定义工具,能完成绝大多数互联网产品性能压测;
  2. PTP平台性能测试一键式执行,完成测试环境准备,脚本分发,执行测试,性能监控,生成性能测试报告;
  3. PTP平台有完善的性能测试报告,包括精细的性能指标分析,TPS、RT、FailRate等,以及全面的服务器资源监控与分析;
  4. PTP平台提供测试机资源管理,合理管理和调度压测机,支持大压力、大流量压测。
    PTP平台使用: [内部平台]

Jmeter:http://jmeter.apache.org/

Apache JMeter是Apache组织开发的纯Java的压力测试工具。它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库, FTP服务器等等。
JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。
Jmeter的几个特点:

  1. 能够对HTTP和FTP服务器进行压力1 和性能测试, 也可以对任何数据库进行同样的测试(通过JDBC)。
  2. 完全的可移植性和100% 纯java。
  3. 完全 Swing 和轻量组件支持(预编译的JAR使用 javax.swing.*)包。
  4. 完全多线程 框架允许通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。
  5. 精心的GUI设计允许快速操作和更精确的计时。
  6. 缓存和离线分析/回放测试结果。

Gatling:http://www.infoq.com/cn/articles/new-generation-server-testing-tool-gatling

Gatling是一款基于Scala 开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标。
Gatling主要用于测量基于HTTP的服务器,比如Web应用程序,RESTful服务等,除此之外它拥有以下特点:

  1. 支持Akka Actors 和 Async IO,从而能达到很高的性能
  2. 支持实时生成Html动态轻量报表,从而使报表更易阅读和进行数据分析
  3. 支持DSL脚本,从而使测试脚本更易开发与维护
  4. 支持录制并生成测试脚本,从而可以方便的生成测试脚本
  5. 支持导入HAR(Http Archive)并生成测试脚本
  6. 支持Maven,Eclipse,IntelliJ等,以便于开发
  7. 支持Jenkins,以便于进行持续集成
  8. 支持插件,从而可以扩展其功能,比如可以扩展对其他协议的支持
  9. 开源免费

Gatling适用的场景包括:

  1. 测试需求经常改变,测试脚本需要经常维护;
  2. 测试环境的客户机性能不强,但又希望发挥硬件的极限性能;
  3. 能对测试脚本进行很好的版本管理,并通过CI进行持续的性能测试;
  4. 希望测试结果轻量易读等。

Garrosh,https://git.hz.netease.com/qaperf/garrosh

Garrosh是一个HTTP异步并发压测工具
其开发初衷是摆脱同步并发测试的局限,模拟真实世界的用户并发访问场景,还能以一种源源不断发送请求的能力适应某些过载测试场景的需求
主要特性包括:

  1. 以异步方式发起压力,测试线程无须同步阻塞地等待结果返回
  2. 提供对HTTP请求的封装,支持HEAD、GET、POST和PUT方法
  3. 自定义测试接口、场景及结果验证,用户通过实现特定接口来完成测试逻辑
  4. 提供测试过程的TPS、平均响应时间的概要分析,兼容grinder数据格式记录每次请求的详细信息

wrk: http://github.com/wg/wrk

wrk 是一款采用异步并发模型的HTTP基准测试工具:

  1. 不同于 ab、webbench,它采用异步并发模型,能够发送更大且可控的压力
  2. 内置 LuaJIT,能够通过 lua 脚本模拟常见的业务行为,模拟更加真实的场景
  3. 相比常见的HTTP基准测试工具,占用更少CPU、更少内存
  4. 支持 HTTP、 HTTPS,能够动态修改头、修改Body方法等
  5. 支持混合场景

Java性能分析工具

VisualVM:https://visualvm.java.net/

VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。
同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。VisualVM主要提供以下的功能:

  1. 监控应用程序的性能和内存占用情况
  2. 监控应用程序的线程
  3. 分析(Profile)应用程序性能和内存分配情况
  4. 进行线程转储(Thread Dump)或堆转储(Heap Dump)
  5. 分析核心转储(Core Dump)
  6. 保存快照以便脱机分析应用程序
    VisualVM是JDK自带工具,使用比较简单,能满足Java性能监控与定位的基本要求,在开发和测试过程中可广泛使用帮忙快速定位和分析问题。
    使用介绍:http://doc.hz.netease.com/download/attachments/43567380/VisualVM%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8.pptx

BTrace:https://kenai.com/projects/btrace

BTrace是一款动态的、安全的java运行时诊断工具。
它允许用户使用java语言编写trace代码,并将这些代码动态注入到JVM的指定位置。
通过这种字节码注入方式,用户可以在不重启程序的情况下,实时获取并统计程序的运行情况,如方法调用耗时、方法入参大小等。
使用介绍:http://doc.hz.netease.com/download/attachments/34179586/JAVA%E6%80%A7%E8%83%BD%E5%88%86%E6%9E%90%E5%88%A9%E5%99%A8%E4%B9%8BBTrace.pptx

byteman:http://byteman.jboss.org/

Byteman是一个简化了Java程序跟踪和测试的工具。 Byteman允许你插入额外的Java代码到您的应用程序中,不管是在JVM启动时或还是已经开始运行加载。
被注入的代码被允许访问任何数据,并调用任何应用程序的方法,包括在那里他们都是私有的。
你几乎可以在任何地方你想要注入代码并没有需要准备的原始源代码事先也没有,你必须重新编译,重新包装或重新部署应用程序。
事实上,你可以删除注入的代码并重新安装不同的代码,而应用程序继续执行。
工具使用:http://doc.hz.netease.com/pages/worddav/preview.action?pageId=38673717&fileName=byteman%E7%AE%80%E4%BB%8B.pptx

Jprofile:http://www.ej-technologies.com/products/jprofiler/overview.html

JProfiler 是一个商业授权的Java剖析工具,由EJ技术有限公司,针对的Java EE和Java SE应用程序开发的。
它把CPU、执行绪和内存的剖析组合在一个强大的应用中。JProfiler可提供许多IDE整合和应用服务器整合用途。

工具使用:http://doc.hz.netease.com/pages/worddav/preview.action?pageId=43567380&fileName=JProfiler%E4%BD%BF%E7%94%A8%E4%B9%8BCPU+profiling.pptx

服务器基准工具

Netperf: http://www.netperf.org/netperf/

Netperf是一种基于C/S模式的网络性能的测量工具,主要针对基于TCP 或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,
即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是两个系统之间发送和接受数据的速度和效率。

Netper主要提供以下几种模式来对网络行为进行模拟:

  1. tcp_stream模式,该模式下client向server发送批量的TCP数据分组,主要用于确定数据传输过程中的吞吐量。
  2. udp_stream模式,该模式下client想server发送批量的UDP数据分组,主要用于测试UDP批量传输时的网络性能。
  3. tcp_rr模式,该模式用于测试在一次TCP连接中,两个节点间TCP交易的次数,例如数据库应用。
  4. tcp_crr模式,该模式用于测试每次数据交易都建立新连接的场景。
  5. udp_rr模式,该模式主要用于测试基于UDP连接的数据交易场景。

FIO:http://freecode.com/projects/fio

FIO是一个用于对磁盘IO进行基准或压力测试的工具,支持19种不同类型的IO引擎,在测试行为上,支持设置IO优先级,多线程测试等等特性。
FIO既可针对块设备也可以针对文件进行测试。测试呈现了详尽的延迟分布情况。

FIO具备以下特点:

  1. FIO的作者Jens Axboe是Linux内核IO部分的maintainer因此提供详尽的测试配置项。
  2. 可以模拟随机、顺序的读写模式,且读与写比例可调。且支持19种不同IO引擎,可定义一次性提交的IO任务数量,便于针对IO队列深度进行测试。
  3. FIO的测试结果包含详尽的时延统计,以及IO带宽情况。

SPEC CPU: https://www.spec.org/cpu2006/

SPEC CPU是SPEC(标准性能评测组织)开发的专门用于评价CPU性能的一套基准测试程序,主要应用于桌面型和服务器型CPU的性能评价。
其目的是比较不同类型CPU的整点计算和浮点运算性能。SPEC CPU对CPU的测试结果在CPU性能评价领域具有很高的权威性。

SPEC CPU具备以下特点:

  1. SPEC是由计算机厂商、系统集成商、大学、研究机构、咨询机构等多家公司组成的非营利性组织,SPEC CPU是该组织建立、维护的一套针对CPU子系统进行标准化评估的测试套件。
  2. SPEC CPU的测试范围专注于系统的处理器、内存子系统和使用到的编译器,而其他因素如磁盘IO、网络、操作系统和图形子系统对于SPEC CPU的测试结果影响很小。
  3. SPEC CPU包含peak和base两种测试模式,分别对应一般的基准测试和CPU超频下的极端场景。
  4. SPEC CPU包括12个整数基准程序集和17个浮点基准程序集,且官网上包含各处理器厂商上传的各型号CPU测试结果,可用于横向对比。

其他工具

Tcpcopy:https://code.google.com/p/tcpcopy/

TcpCopy是一种请求复制(所有基于tcp的packets)工具,可以把在线请求导入到测试系统中去。已经广泛应用于国内各大互联网公司。TcpCopy七大功能如下:
1.分布式压力测试工具,利用在线数据,可以测试系统能够承受的压力大小(远比ab压力测试工具真实地多),也可以提前发现一些bug
2.普通上线测试,可以发现新系统是否稳定,提前发现上线过程中会出现的诸多问题,让开发者有信心上线
3.对比试验,同样请求,针对不同或不同版本程序,可以做性能对比等试验
4.流量放大功能
5.利用TCPCopy转发传统压力测试工具发出的请求,可以增加网络延迟,使其压力测试更加真实
6.热备份
7.实战演习
特点:
1.可实时,也可离线
2.效果真实
3.低负载,不影响在线
4.操作简单
5.分布式
6.零成本
tcpcopy能够解决线下模拟测试遇到的业务覆盖不全,测试脚本和数据准备比较困难的问题,同时因为是线上的请求,真实度更高。非常适合读请求比例非常高的业务场景。使用tcpcopy进行引流测试会
面临相邻请求有业务联系,导致引流可能失败,以及https请求无法复制,写请求无法复制,以及非幂等请求无法复制的问题。实际运用要考虑被测系统以及业务来设定有效的引流方案。
使用介绍:http://doc.hz.netease.com/display/qa/Tcpcopy

perf:https://perf.wiki.kernel.org/index.php/Main_Page

Perf 是用来进行软件性能分析的工具。
通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。
它不但可以分析指定应用程序的性能问题 (per thread),也可以用来分析内核的性能问题,当然也可以同时分析应用代码和内核,从而全面理解应用程序中的性能瓶颈。
The userspace perf command present a simple to use interface with commands like:

  1. perf stat: obtain event counts
  2. perf record: record events for later reporting
  3. perf report: break down events by process, function, etc.
  4. perf annotate: annotate assembly or source code with event counts
  5. perf top: see live event count
  6. perf bench: run different kernel microbenchmarks

valgrind:http://valgrind.org/

Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。
你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。
使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上,使得你的程序更加稳固。
valgrind工具集支持:

  1. Memcheck:这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况
  2. Callgrind:它主要用来检查程序中函数调用过程中出现的问题
  3. Cachegrind:它主要用来检查程序中缓存使用出现的问题。
  4. Helgrind:它主要用来检查多线程程序中出现的竞争问题
  5. Massif:它主要用来检查程序中堆栈使用中出现的问题
  6. Extension:可以利用core提供的功能,自己编写特定的内存调试工具
    使用介绍:http://doc.hz.netease.com/download/attachments/47985953/Valgrind%E6%9C%80%E6%96%B0%E4%BB%8B%E7%BB%8D.pdf

blktrace:http://www.cse.unsw.edu.au/~aaronc/iosched/doc/blktrace.html

blktrace是一个针对Linux内核中块设备I/O层的跟踪工具,用来收集磁盘IO信息中当IO进行到块设备层(block层,所以叫blk trace)时的详细信息(如IO请求提交,入队,合并,完成等等一些列的信息),是由Linux内核块设备层的维护者开发的,目前已经集成到内核 2.6.17及其之后的内核版本中。通过使用这个工具,使用者可以获取I/O请求队列的各种详细的情况,包括进行读写的进程名称、进程号、执行时间、读写 的物理块号、块大小等等,是一个Linux下分析I/O相关内容的很好的工具。
使用说明:http://duch.mimuw.edu.pl/~lichota/09-10/Optymalizacja-open-source/Materialy/10%20-%20Dysk/gelato_ICE06apr_blktrace_brunelle_hp.pdf

systemtap:https://sourceware.org/systemtap/wiki

SystemTap是我目前所知的最强大的内核调试工具,有些家伙甚至说它无所不能:)
SystemTap 是监控和跟踪运行中的Linux 内核的操作的动态方法。这句话的关键词是动态,因为SystemTap 没有使用工具构建一个特殊的内核,而是允许您在运行时动态地安装该工具。

你可能感兴趣的:(性能测试工具)