Je veux faire des mesures de performances (principalement le runtime) pour mon Java, un algorithme complexe local unique) (donc je ne veux pas de macro-benchmark pour mesurer une implémentation JVM .)
Avec l'outil, je voudrais
Pour cela, je voudrais utiliser un outil ou un framework qui
Quels outils/cadres répondent à ces exigences? Lequel conviendrait le mieux à l'analyse de la complexité et des tendances, et pourquoi?
Voici une liste alphabétique de tous les outils que j'ai trouvés. Les aspects mentionnés sont:
paramétrable; Bibliothèque Perl; pas de micro-benchmarking JVM; traçage; persistance; analyse de tendance!?; bonnes statistiques (exécuter un test donné jusqu'à stabilisation des résultats; mettre en évidence les valeurs aberrantes).
non paramétrable; Java; micro-benchmark JVM; pas de traçage; pas de persistance; pas d'analyse de tendance; statistiques.
Est-ce que les statistiques sont extrêmement bien: en plus de la moyenne, max, min et écart-type, il calcule également l'intervalle de confiance à 95% (via bootstrapping) et la corrélation série (par exemple pour avertir des temps d'exécution oscillants, qui peuvent se produire si votre programme se comporte de manière non déterministe, par exemple parce que vous utilisez des HashSets). Il décide de la fréquence à laquelle le programme doit être itéré pour obtenir des mesures précises et les interprète pour les rapports et les avertissements (par exemple sur les valeurs aberrantes et la corrélation en série).
Le micro-benchmarking fonctionne également très bien (voir Créer un benchmark rapide/fiable avec java? pour plus de détails).
Malheureusement, le framework est fourni dans un paquet util groupé avec de nombreuses autres classes d'assistance. Les classes de référence dépendent de JSci (une API scientifique pour Java) et de Mersenne Twister ( http://www.cs.gmu.edu/~sean/research/ ). Si l'auteur, Brent Boyer, trouve du temps, il réduira la bibliothèque et ajoutera un grapher plus simple pour que l'utilisateur puisse inspecter visuellement les mesures, par ex. pour les corrélations et les valeurs aberrantes.
paramétrable; Java; micro-benchmark JVM; traçage; persistance; aucune analyse de tendance; statistiques.
Projet relativement nouveau, adapté aux applications Android. Apparemment jeune mais prometteur. Dépend de Google Guava :(
non paramétrable!?; Java; pas de micro-benchmark JVM!?; Traçage; persistance via un servlet; pas d'analyse de tendance!?; Pas de statistiques!?.
Prend en charge l'instrumentation AOP.
non paramétrable; Java; pas de micro-benchmarking JVM; traçage, persistance et analyse des tendances avec des outils supplémentaires (Jarep ou JMX); statistiques.
Une bonne surveillance, entrelacée avec log4j, les données peuvent également être consultées ou interrogées par programme et votre programme peut prendre des mesures sur les résultats.
non paramétrable!?; Java; pas de micro-benchmarking JVM; traçage uniquement avec Jarep; persistance uniquement avec JMX; pas d'analyse de tendance; pas de statistiques!?.
Concurrent de Jamon, prend en charge une hiérarchie de moniteurs.
non paramétrable; Java; micro-benchmark JVM; traçage; persistance; pas d'analyse de tendance; pas de statistiques.
Bel outil de surveillance léger, pas de dépendances :) N'offre pas de statistiques suffisantes (pas d'écart type), et l'extension du plugin semble en conséquence assez difficile (les agrégateurs et les agrégats n'ont que des getters fixes pour min, max et moyenne).
paramétrable!?; Java; pas de micro-benchmark JVM!?; Traçage; persistance; analyse de tendance!?; Statistiques!?.
Bonne bibliothèque de surveillance conçue pour les applications Web de test de charge.
Java Microbenchmark Harness (jmh
)
paramétrable (invocateurs personnalisés via Java API); Java; JVM microbenchmarking; aucun tracé; aucune persistance; aucune analyse de tendance; statistiques).
Le harnais d'analyse comparative construit par les experts Oracle HotSpot, donc très approprié pour le micro-benchmarking sur HotSpot, utilisé dans le travail de performance OpenJDK. Des mesures extrêmes sont prises pour fournir un environnement de référence fiable. Outre une sortie lisible par l'homme, jmh fournit une API Java pour traiter les résultats, par exemple pour les traceurs tiers et les fournisseurs de persistance.
paramétrable; Java; micro-benchmarking JVM; traçage; persistance (en utilisant CONSOLE, XML ou la base de données H2); analyse graphique des tendances; statistiques (max, min, moyenne, écart type; mais pas facilement extensible pour de plus amples informations) statistiques).
Ajoutez simplement une règle junit-4 à vos tests junit :)
junit-Benchmarks est open source, sous la licence Apache 2.
Mettre à jour: projet déplacé vers jmh
Principalement pour faire une analyse des tendances pour les performances (avec le décorateur de test JUnit TimedTest
) et l'évolutivité (avec le décorateur de test JUnit LoadTest
).
paramétrable; Java; pas de micro-benchmarking JVM; pas de traçage; pas de persistance; pas de statistiques.
non paramétrable; Java; pas de micro-benchmarking JVM; traçage; persistance via JMX; analyse des tendances via un appender log4j; statistiques.
S'appuie sur un cadre de journalisation, peut utiliser AOP.
Concept très général: les moniteurs observent des conditions prédéfinies et précisent comment réagir lorsqu'elles sont remplies.
L'accent est mis sur la paramétrisation: vérifiez si votre algorithme évolue, c'est-à-dire vérifiez s'il s'agit de O (n), O (n log (n)), O (n²) ...
Bibliothèque Java; Micro benchmarking JVM; pas de traçage; persistance; analyse de tendance; pas de statistiques.
paramétrable; Bibliothèque Jython; pas de micro-benchmarking JVM; traçage; persistance; aucune analyse des tendances; pas de bonnes statistiques, mais facilement extensible.
Dépend de Jython, HTTPClient, JEditSyntax, ApacheXMLBeans, PicoContainer.
paramétrable!?; Java; pas de micro-benchmark JVM!?; Traçage; persistance; analyse graphique des tendances; pas de statistiques!?
La plate-forme d'outils de test et de performance est une énorme plate-forme générique et extensible (basée sur Eclipse et quatre EMF). Par conséquent, elle est puissante mais assez complexe, peut ralentir Eclipse et l'étendre pour vos propres besoins (par exemple avec des statistiques pour qu'ils influencent le nombre d'itérations) semblent être très difficiles.
paramétrable!?; Java; pas de micro-benchmarking JVM; traçage; persistance; analyse des tendances!?; Statistiques!?.
L'outil est adapté à la surveillance dans les grands clusters.
Une autre alternative est caliper de google. Il permet test paramétré .
Essayez d'utiliser http://labs.carrotsearch.com/junit-benchmarks.html . Il s'agit d'une extension de JUni4, avec:
Enregistre la moyenne du temps d'exécution et l'écart type.
Enregistrement de l'activité du ramasse-miettes.
Phase de préchauffage JVM par référence.
Génération de graphiques par exécution et historique.
Persistance facultative des résultats dans la base de données H2 SQL (interrogation avancée, analyse historique).