下面是我找到的所有工具的按字母顺序排列的列表。提到的方面是:
- 是否易于参数化
- 它是 Java 库还是至少可以轻松集成到您的 Java 程序中
- 它可以处理 JVM 微基准测试吗?使用热身阶段
- 它可以直观地绘制结果
- 是否可以永久存储测量值
- 它能否进行趋势分析以警告新提交导致速度变慢
- 它是否提供和使用统计数据(至少是最大值、最小值、平均值和标准差)。
Auto-pilot
可参数化; Perl 库;没有 JVM 微基准测试;绘图;坚持;趋势分析!?;良好的统计数据(运行给定的测试直到结果稳定;突出显示异常值)。
Benchmarking framework
不可参数化; Java库; JVM微基准测试;没有绘图;没有坚持;没有趋势分析;统计数据。
统计数据非常好:除了平均值、最大值、最小值和标准偏差之外,它还计算 95% 置信区间(通过自举)和序列相关性(例如,警告振荡的执行时间,如果您的程序运行时可能会发生这种情况不确定性,例如因为您使用 HashSets)。它决定了程序必须多久迭代一次才能获得准确的测量结果,并解释这些结果以进行报告和警告(例如关于异常值和序列相关性)。
微基准测试也做得非常好(详见Create quick/reliable benchmark with java?)。
不幸的是,该框架包含在一个与许多其他帮助类捆绑在一起的 util 包中。基准测试类依赖于 JSci(Java 的科学 API)和 Mersenne Twister (http://www.cs.gmu.edu/~sean/research/)。如果作者 Brent Boyer 有时间,他会将库精简并添加一个更简单的绘图器,以便用户可以直观地检查测量结果,例如用于相关性和异常值。
Caliper
可参数化; Java库; JVM微基准测试;绘图;坚持;没有趋势分析;统计数据。
相对较新的项目,专为 Android 应用量身定制。看起来年轻但很有前途。取决于谷歌番石榴:(
Commons monitoring
不可参数化!? Java库;没有 JVM 微基准测试!?绘图;通过 servlet 持久化;没有趋势分析!?;没有统计数据!?。
支持 AOP 检测。
JAMon
不可参数化; Java库;没有 JVM 微基准测试;使用附加工具(Jarep 或 JMX)进行绘图、持久性和趋势分析;统计数据。
良好的监控,与 log4j 交织在一起,还可以通过编程方式访问或查询数据,并且您的程序可以对结果采取行动。
Java Simon
不可参数化!? Java库;没有 JVM 微基准测试;仅使用 Jarep 进行绘图;仅使用 JMX 持久化;没有趋势分析;没有统计数据!?。
Jamon 的竞争对手,支持监视器的层次结构。
JETM
不可参数化; Java库; JVM微基准测试;绘图;坚持;没有趋势分析;没有统计数据。
不错的轻量级监控工具,没有依赖关系 :) 没有提供足够的统计信息(没有标准偏差),相应地扩展插件看起来相当困难(聚合器和聚合器只有固定的最小值、最大值和平均值的 getter)。
jmeter
参数化!?; java库;没有 JVM 微基准测试!?绘图;坚持;趋势分析!?;统计数据!?。
为负载测试 Web 应用程序量身定制的良好监控库。
Java Microbenchmark Harness (jmh)
参数化(通过 Java API 自定义调用程序); Java库; JVM微基准测试;没有地块;没有坚持;没有趋势分析;统计数据。
Oracle 的 HotSpot 专家构建的基准测试工具,因此非常适合在 HotSpot 上进行微基准测试,用于 OpenJDK 性能工作。采取极端措施提供可靠的基准测试环境。除了人类可读的输出,jmh 还提供了一个 Java API 来处理结果,例如用于第 3 方绘图仪和持久性提供程序。
junit-Benchmarks
可参数化; Java库; JVM微基准测试;绘图;持久性(使用 CONSOLE、XML 或数据库 H2);图形趋势分析;统计数据(最大值、最小值、平均值、标准差;但不容易扩展以进行进一步的统计)。
只需在您的 junit 测试中添加一个 junit-4-rule :)
junit-Benchmarks 是开源的,在 Apache 2 许可下。
更新:项目移至jmh
junitperf
主要用于对性能(使用 JUnit 测试装饰器 TimedTest)和可扩展性(使用 JUnit 测试装饰器 LoadTest)进行趋势分析。
可参数化; Java库;没有 JVM 微基准测试;没有绘图;没有坚持;没有统计数据。
perf4j
不可参数化; Java库;没有 JVM 微基准测试;绘图;通过 JMX 持久化;通过 log4j appender 进行趋势分析;统计数据。
建立在日志框架之上,可以使用 AOP。
Project Broadway
非常笼统的概念:监视器观察预定义的条件并指定在满足时如何反应。
speedy-mcbenchmark
主要关注可参数化:检查您的算法是否可扩展,即检查是否为 O(n)、O(n log(n))、O(n²)...
java 库; JVM微基准测试;没有绘图;坚持;趋势分析;没有统计数据。
The Grinder
可参数化; Jython 库;没有 JVM 微基准测试;绘图;坚持;没有趋势分析;没有好的统计数据,但很容易扩展。
取决于 Jython、HTTPClient、JEditSyntax、ApacheXMLBeans、PicoContainer。
TPTP
参数化!?; Java工具平台;没有 JVM 微基准测试!?绘图;坚持;图形趋势分析;没有统计数据!?
测试和性能工具平台是一个巨大的通用和可扩展工具平台(基于 Eclipse 和四个 EMF 模型)。因此,它功能强大但相当复杂,可能会减慢 Eclipse 的速度,并且根据您自己的需要扩展它(例如,使用统计信息以影响迭代次数)似乎非常困难。
Usemon
参数化!?; Java库;没有 JVM 微基准测试;绘图;坚持;趋势分析!?;统计数据!?。
工具专为在大型集群中进行监控而量身定制。