У меня было количество запросов, выполняемых моим java-кодом. Для каждого запроса мне нужно контролировать время выполнения. Более того, мне также необходимо контролировать время выполнения определенных функций. Итак, есть ли способ сделать это элегантным способом?Мониторинг производительности Java
ответ
Для этого есть проект с открытым исходным кодом. Вот пример фрагмента кода из него.
private final static int BASIC_STOPWATCH_ID =
Audits.mapAudit("example.basicStopwatch");
public void tryOut(){
final Stopwatch stopwatch = Audits.getBasicStopwatch(BASIC_STOPWATCH_ID);
stopwatch.start();
doSomeWork();
stopwatch.stop();
}
Caudit находится на github.
С помощью Jprofiler или других инструментов вы можете просто следить за временем. С Caudit вы можете наблюдать навсегда. просто проверьте это. –
Perf4J - лучшее решение для этого.
Perf4J - это набор инструментов с открытым исходным кодом для добавления инструкций синхронизации времени на сервере Java и для ведения журнала, анализа и мониторинга результатов. Для тех разработчиков, которые знакомы с рамками лесозаготовительных, таких как log4j или java.util.logging, аналогия помогает описать Perf4J:
Perf4J является System.currentTimeMillis(), как log4j должен System.out.println()
для дальнейшей ссылки вы можете посетить http://www.infoq.com/articles/perf4j
Если вы хотите измерить время выполнения метода, вы можете также использовать System.nanoTime()
метод Java. На котором используется таймер с наивысшим разрешением, доступный на вашей платформе. Время - относительное «свободное время», которое можно сравнить только с другими значениями nanoTime. (https://blogs.oracle.com/dholmes/entry/inside_the_hotspot_vm_clocks)
Однако очень важно помнить, что Java требует значительного времени для «разогрева». Java запускает свой скомпилированный байт-код в JVM (виртуальная машина Java) и использует JIT (компилятор Just In Time) для оптимизации частей байт-кода во время выполнения, чтобы повысить производительность.
Если вы хотите иметь точные измерения скорости выполнения, вы должны запускать свою функцию несколько раз и не использовать измеренные времена первых прогонов. Возьмем, например, следующий код:
import java.util.Random;
import tools.Helpers;
public class DivideInlineShort {
public static void main(String[] args) {
int n = args.length > 0 ? Integer.parseInt(args[0]) : 10000;
Random r = new Random();
for (int i = 0; i < 50; i++)
runTest(n, r.nextInt(8) + 1); // you need the random to prevent the JVM removing the loops
}
public static void runTest(int n, int ran) {
int counter = 0;
long timeStart = System.nanoTime();
for (int j = 0; j < n; j++)
for (int i = ran; i < 100000 + ran; i++)
counter += return1(i);
long timeEnd = System.nanoTime();
System.out.println(
Helpers.roundedTimeInMillis(timeStart, timeEnd) + "\t\t" + counter);
}
public static int return1(int i) {
return i/i;
}
}
Первые 2 до 3 пробеги взял мою машину около 700 мс, в то время как остальные 47 были вокруг 370ms. Это можно объяснить из-за оптимизации inlining, которая срабатывает после того, как метод называется более 10.000 раз, если я правильно помню.
Так что, если вы хотите точно измерить время выполнения кода, вы должны запускать его несколько раз на одном экземпляре JVM и пренебрегать первыми несколькими раундами.
- 1. Мониторинг производительности системы (Windows), хотя Java-программа
- 2. Мониторинг производительности системы unix с помощью java
- 3. ASP.NET: мониторинг производительности приложения
- 4. мониторинг производительности репитера citrix
- 5. Мониторинг производительности Beanstalkd
- 6. Мониторинг производительности Openerp
- 7. Мониторинг производительности в Oracle DB
- 8. Мониторинг производительности: Ganglia vs Graphite
- 9. Мониторинг производительности Grails с Hudson
- 10. Мониторинг производительности и нагрузки SQL
- 11. Мониторинг производительности для ASP.NET MVC2?
- 12. Мониторинг производительности с веб-садоводством
- 13. Мониторинг производительности сервера присутствия opensips
- 14. Мониторинг производительности работы отдельных окон
- 15. Мониторинг проблем производительности SQL JOB
- 16. .NET-приложения и мониторинг производительности
- 17. Мониторинг производительности Eclipse: что делает Eclipse?
- 18. Мониторинг приложения для мониторинга производительности рабочего стола Java
- 19. Мониторинг Java из Java
- 20. Мониторинг производительности надстройки Visual Studio и расширений?
- 21. Мониторинг производительности Linux, любой способ отслеживать потоки?
- 22. Мониторинг производительности сети для определенного процесса
- 23. Мониторинг производительности запросов CYPHER в Neo4J
- 24. Мониторинг производительности Heroku Postgres с помощью pg_stat_statements
- 25. Мониторинг производительности сервера - самый медленный Compoent
- 26. Мониторинг и отчетность по производительности компонентов .NET
- 27. Мониторинг производительности в Silverlight 2.0 Приложение
- 28. Как отключить мониторинг производительности в Azure?
- 29. Измерение и мониторинг производительности сервера Node.JS
- 30. Мониторинг и расчет производительности сайта asp.net
Запрашивать предложения по библиотеке явно не по теме, извините. – Zong