下面是我找到的所有工具的字母顺序列表。提到的几个方面是:
- 是否容易参数化
- 它是一个 Java 库还是至少可以轻松集成到您的 Java 程序中
- 它可以处理 JVM 微基准测试吗?使用预热阶段
- 可以直观地绘制结果吗
- 是否可以持久存储测量值
- 它可以进行趋势分析来警告新的提交导致速度减慢吗
- 它是否提供并使用统计数据(至少最大、最小、平均值和标准差)。
自动驾驶仪 http://tcos.org/project-autopilot.html
可参数化; Perl 库;没有 JVM 微基准测试;策划;坚持;趋势分析!?;良好的统计数据(运行给定的测试直到结果稳定;突出显示异常值)。
基准测试框架 http://www.ellipticgroup.com/misc/projectLibrary.zip
不可参数化; Java 库; JVM 微基准测试;没有阴谋;没有坚持;没有趋势分析;统计数据。
统计数据非常好:除了平均值、最大值、最小值和标准差之外,它还计算 95% 置信区间(通过自举)和序列相关性(例如,警告执行时间的振荡,如果程序行为不确定,则可能会发生这种情况,例如因为你使用哈希集)。它决定程序必须迭代的频率才能获得准确的测量结果,并解释这些结果以进行报告和警告(例如关于异常值和序列相关性)。
微基准测试也非常好(参见使用 java 创建快速/可靠的基准测试? https://stackoverflow.com/questions/6373550/create-quick-reliable-benchmark-with-java/7120803#7120803了解详情)。
不幸的是,该框架位于一个与许多其他帮助程序类捆绑在一起的实用程序包中。基准测试类依赖于 JSci(Java 的科学 API)和 Mersenne Twister(http://www.cs.gmu.edu/~sean/research/ http://www.cs.gmu.edu/~sean/research/)。如果作者 Brent Boyer 有时间,他会将库精简并添加一个更简单的绘图器,以便用户可以直观地检查测量结果,例如相关性和异常值。
Caliper http://code.google.com/p/caliper/
可参数化; Java 库; JVM 微基准测试;策划;坚持;没有趋势分析;统计数据。
相对较新的项目,专为 Android 应用程序量身定制。看起来年轻但很有前途。取决于谷歌番石榴:(
公共监控 http://commons.apache.org/sandbox/monitoring/
不可参数化!?; Java 库;没有 JVM 微基准测试!?;策划;通过 servlet 进行持久化;没有趋势分析!?;没有统计数据!?
支持 AOP 检测。
JAMon http://jamonapi.sourceforge.net/
不可参数化; Java 库;没有 JVM 微基准测试;使用附加工具(Jarep 或 JMX)进行绘图、持久性和趋势分析;统计数据。
良好的监控与 log4j 交织在一起,还可以通过编程方式访问或查询数据,并且您的程序可以对结果采取操作。
爪哇西蒙 https://github.com/virgo47/javasimon
不可参数化!?; Java 库;没有 JVM 微基准测试;只与 Jarep 密谋;仅使用 JMX 进行持久化;没有趋势分析;没有统计数据!?
Jamon 的竞争对手,支持监视器的层次结构。
JETM http://jetm.void.fm/index.html
不可参数化; Java 库; JVM 微基准测试;策划;坚持;没有趋势分析;没有统计数据。
不错的轻量级监控工具,没有依赖性:)不提供足够的统计数据(没有标准偏差),并且相应地扩展插件看起来相当困难(聚合器和聚合器只有最小值、最大值和平均值的固定获取器)。
jmeter http://jakarta.apache.org/jmeter/
可参数化!?; java 库;没有 JVM 微基准测试!?;策划;坚持;趋势分析!?;统计数据!?。
专为负载测试 Web 应用程序而定制的良好监控库。
Java 微基准测试工具 (jmh) http://openjdk.java.net/projects/code-tools/jmh/
可参数化(通过 Java API 自定义调用程序); Java 库; JVM 微基准测试;没有情节;没有坚持;没有趋势分析;统计数据。
由 Oracle HotSpot 专家构建的基准测试工具,非常适合在 OpenJDK 性能工作中使用的 HotSpot 微基准测试。我们采取了极端措施来提供可靠的基准测试环境。除了人类可读的输出之外,jmh 还提供 Java API 来处理结果,例如对于第三方绘图者和持久性提供者。
junit-基准测试 http://labs.carrotsearch.com/junit-benchmarks.html
可参数化; Java 库; JVM 微基准测试;策划;持久性(使用 CONSOLE、XML 或数据库 H2);图形趋势分析;统计(最大值、最小值、平均值、标准差;但不易扩展以进行进一步统计)。
只需将 junit-4-rule 添加到您的 junit 测试中即可:)
junit-Benchmarks 是开源的,遵循 Apache 2 许可证。
Update: 项目移至jmh http://openjdk.java.net/projects/code-tools/jmh/
朱尼特珀夫 http://clarkware.com/software/JUnitPerf.html
主要用于进行性能趋势分析(使用 JUnit 测试装饰器TimedTest
)和可扩展性(使用 JUnit 测试装饰器LoadTest
).
可参数化; Java 库;没有 JVM 微基准测试;没有阴谋;没有坚持;没有统计数据。
perf4j http://perf4j.codehaus.org/
不可参数化; Java 库;没有 JVM 微基准测试;策划;通过 JMX 持久化;通过 log4j 附加器进行趋势分析;统计数据。
构建在日志框架之上,可以使用 AOP。
百老汇计划 http://code.google.com/p/broadway-monitor/
非常一般的概念:监视器观察预定义的条件并指定满足条件时如何反应。
快速 mcbenchmark http://code.google.com/p/speedy-mcbenchmark/
主要关注点是可参数化:检查你的算法是否可扩展,即检查它是否为 O(n)、O(n log(n))、O(n²)...
java 库; JVM 微基准测试;没有阴谋;坚持;趋势分析;没有统计数据。
研磨机 http://grinder.sourceforge.net/
可参数化; Jython 库;没有 JVM 微基准测试;策划;坚持;没有趋势分析;没有好的统计数据,但易于扩展。
取决于 Jython、HTTPClient、JEditSyntax、ApacheXMLBeans、PicoContainer。
TPTP http://www.eclipse.org/tptp/
可参数化!?; Java工具平台;没有 JVM 微基准测试!?;策划;坚持;图形趋势分析;没有统计!?
测试和性能工具平台是一个巨大的通用且可扩展的工具平台(基于Eclipse和四个EMF模型)。因此,它很强大,但相当复杂,可能会减慢 Eclipse 的速度,并且根据您自己的需要扩展它(例如,使用统计数据,以便它们影响迭代次数)似乎非常困难。
Usemon http://code.google.com/p/usemon/
可参数化!?; Java 库;没有 JVM 微基准测试;策划;坚持;趋势分析!?;统计数据!?。
该工具专为大型集群中的监控而定制。