Каков наилучший инструмент / фреймворк макро-бенчмаркинга для измерения однопоточного сложного алгоритма в Java? [закрытый]


Я хочу сделать некоторые показатели производительности (в основном во время выполнения) для моего кода Java, однопоточного, локального, сложного алгоритма. (Поэтому я не хочу макро-контрольных показателей для оценки реализации виртуальной машины Java.)

с помощью инструмента, я хотел бы

  • анализ сложности, т. е. смотрите, как мой код масштабируется для параметра n (глубина поиска). (У меня уже есть тест junit, параметризованный в n.)
  • сделай что-нибудь анализ тенденций получить предупрежден, если некоторые изменения в базе кода делают код медленнее.

для этого, я хотел бы использовать инструмент или фреймворк, который

  • тут статистика оптимально вычисляя среднее значение, стандартное отклонение и доверительные интервалы. Это очень важно.
  • может быть параметризованные (см. параметр n выше). Это тоже очень важно.
  • способен производить причудливый сюжет было бы неплохо, но нет требуется
  • может использоваться в автоматизированном (junit-)тесте, чтобы предупредить меня, если моя программа замедляется, но это также не требуется, просто плюс.

какие инструменты / фреймворки удовлетворяют этим требованиям? Какой из них хорошо подходит для анализа сложности и тенденций, и почему?

3 51

3 ответа:

Ниже приведен алфавитный список всех инструментов, которые я нашел. Упомянутые аспекты:

  • это легко параметрируемые
  • это библиотека Java или, по крайней мере, легко интегрируется в вашу программу Java
  • может ли он обрабатывать микро бенчмаркинг JVM, например, использовать фазу прогрева
  • может ли он построить результаты визуально
  • может ли он хранить измеренные значения постоянно
  • может ли он сделать анализ тренда, чтобы предупредить, что новый коммит вызвал замедление
  • предоставляет ли он и использует статистику (по крайней мере, максимальное, минимальное, среднее и стандартное отклонение).

авто-пилот

параметризуемый; библиотека Perl; нет JVM микро бенчмаркинга; построение графиков; персистентность; анализ тенденций!?; хорошая статистика (выполнить данный тест, пока результаты не стабилизируются; выделить выбросы).

основы

не параметрируемые; Java-библиотека; для JVM микро-бенчмаркинг; ни интриг; без стойкости; анализ тренда; статистика.

очень хорошо ли статистика: помимо среднего, максимального, минимального и стандартного отклонения, она также вычисляет 95% доверительный интервал (через загрузку) и последовательную корреляцию (например, чтобы предупредить о колебаниях времени выполнения, которые могут возникнуть, если ваша программа ведет себя недетерминированно, например, потому что вы используете хэш-наборы). Это решает, как часто программа должна быть повторяется для получения точных измерений и интерпретирует их для отчетности и предупреждений (например, о выбросах и последовательной корреляции).

также микро-бенчмаркинг очень хорошо (см. создать быстрый / надежный тест с java? для деталей).

к сожалению, фреймворк поставляется в util-пакете в комплекте с большим количеством других вспомогательных классов. Эталонные классы зависят от JSci (научный API для Java) и Mersenne Twister (http://www.cs.gmu.edu/~sean / research/). если автор, Брент Бойер, найдет время, он сварит библиотеку и добавит более простой grapher, чтобы пользователь мог визуально проверять измерения, например, для корреляций и выбросов.

регулировка

параметризуемый; Java библиотека; JVM микро бенчмаркинг; построение графиков; персистентность; нет анализа тенденций; статистика.

относительно новый проект, ориентированный на Приложения для Android. Выглядит молодо, но многообещающе. Зависит от Google Guava : (

Викискладе мониторинга

не параметрируемые!?; Java-библиотека; отсутствие JVM в микро-бенчмаркинг!?; построение графика; постоянство через сервлет; нет анализа тренда!?- никакой статистики!?.

поддерживает аппаратуры АОП.

хамоном

не параметризуется; библиотека Java; нет JVM микро бенчмаркинга; построение графиков, анализ устойчивости и тенденций с помощью дополнительных инструментов (Jarep или JMX); статистика.

хороший контроль, переплетенный с log4j, данные можно также программно достигнуть или запросить и ваша программа может принять действия на результатах.

Java Simon

не параметрируемые!?; Java-библиотека; отсутствие JVM в микро-бенчмаркинг; заговор только с Jarep; настойчивость только с помощью JMX; отсутствие анализа тренда; нет статистика!?.

конкурент хамона, поддерживает иерархию мониторов.

JETM

не параметризуется; библиотека Java; микро бенчмаркинг JVM; построение графиков; персистентность; нет анализа тенденций; нет статистики.

хороший легкий инструмент мониторинга, без зависимостей :) не предлагает достаточной статистики (без стандартного отклонения), и расширение плагина соответственно выглядит довольно сложно (агрегаторы и Агрегаты имеют только фиксированные геттеры для min, max и average).

jmeter

параметрируемые!?; Java-библиотека; отсутствие JVM в микро-бенчмаркинг!?; построение графиков; настойчивость; анализ тенденций!?- статистика!?.

хорошая библиотека мониторинга, предназначенная для нагрузочного тестирования веб-приложений.

Жгут Проводов Java Microbenchmark (jmh)

параметризированного (пользовательских вызове с помощью Java API-интерфейс); Java-библиотека; для JVM microbenchmarking; никаких заговоров; без стойкости; анализ тренда; статистика.

проводка бенчмаркинга построенная специалистами точки доступа Oracle, таким образом очень соответствующая для microbenchmarking на точке доступа, используемой в работе представления OpenJDK. Для обеспечения надежной среды бенчмаркинга принимаются крайние меры. Помимо удобочитаемого вывода, jmh предоставляет Java API для обработки результатов, например, для сторонних плоттеров и персистентности услуги поставщиков.

junit-бенчмарки

параметризуемый; библиотека Java; JVM micro benchmarking; построение графиков; персистентность (с использованием консоли, XML или базы данных H2); графический анализ тенденций; статистика (max, min, average, standard deviation; но не легко расширяемая для дальнейшей статистики).

просто добавьте правило junit-4 в свои тесты junit:)

junit-бенчмарки с открытым исходным кодом, под Apache 2 лицензия.

обновление: проект переехал на jmh

junitperf

главным образом для делать анализ тенденции для представления (с декоратором испытания JUnit TimedTest) и масштабируемость (с помощью JUnit test decorator LoadTest).

параметрируемые; Java-библиотека; отсутствие JVM в микро-бенчмаркинг; ни интриг; отсутствие настойчивости; отсутствие статистика.

perf4j

не параметризуется; библиотека Java; нет JVM микро бенчмаркинга; построение графиков; сохранение через JMX; анализ тенденций через приложение log4j; статистика.

строит на основе структуры ведения журнала, может использовать AOP.

Бродвей Проекта

очень общая концепция: мониторы соблюдают предопределенные условия и определяют, как реагировать, когда они выполняются.

speedy-mcbenchmark

основной упор делается на parameterizability: проверка Весов алгоритма, т. е. проверить, если это o(n), а за o(n журнал(N)) и o(Н2)...

библиотека java; JVM микро бенчмаркинг; нет построения графиков; постоянство; анализ тенденций; нет статистики.

Кофемолки

параметрируемые; библиотека языка Jython; отсутствие JVM в микро-бенчмаркинг; черчение; настойчивость; отсутствие тренда анализ; нет хорошей статистики, но легко расширяется.

зависит от Jython, HTTPClient, JEditSyntax, ApacheXMLBeans, PicoContainer.

tptp, с помощью

параметрируемые!?; Платформы Java инструмент; отсутствие JVM в микро-бенчмаркинг!?; построение графиков; постоянство; графический анализ тенденций; нет статистики!?

платформа Test & Performance Tools-это огромная универсальная и расширяемая инструментальная платформа (основанная на Eclipse и четырех моделях EMF). Следовательно, он мощный, но довольно сложный, может замедлить затмение, и расширение его для ваших собственных нужд (например, со статистикой, чтобы они влияли на количество итераций) кажется очень сложным.

Usemon

параметрируемые!?; Библиотека Java; нет микро бенчмаркинга JVM; построение графиков; постоянство; анализ тенденций!?- статистика!?.

инструмент предназначен для мониторинга в больших кластерах.

Другой альтернативой является регулировка от google. Это позволяет параметризованного тестирования.

попробуйте использовать http://labs.carrotsearch.com/junit-benchmarks.html. это расширение для JUni4, особенности:

записывает среднее время выполнения и стандартное отклонение.
Запись активности сборщика мусора.
ТВ-тест для JVM прогрева.
За запуск и генерацию исторических диаграмм.
Необязательное сохранение результатов в базе данных SQL H2 (расширенный запрос, исторический анализ).