Вы использовали Perf4J для сбора и анализа показателей производительности в приложении Java?
Вы использовали Perf4J в своем приложении Java для сбора и анализа статистики производительности?
Каков был типичный шаблон (с использованием файлов журналов, утилит, пользовательского интерфейса, JMX и т.д.)?
Вы использовали аннотации и функции на основе AOP?
Использовали ли вы какую-либо интеграцию JMX?
Как вы справились с производственной конфигурацией?
Вы включали представления/отчеты о характеристиках производительности в качестве функции вашего приложения?
Расскажите, пожалуйста, почему и почему вы решили использовать альтернативную библиотеку/подход.
Ответы
Ответ 1
Я использую Per4j для мониторинга производительности конечных точек webservice, а также для внутренней службы и производительности класса dao.
Я в основном просто регистрирую исходную статистику производительности в ежедневном файле. Затем я использую банку в командной строке для анализа данных с разными временными интервалами, как мне кажется. Я часто использую параметр командной строки -g
для вывода html файла, который затем могу открыть и визуально визуально увидеть, что действительно полезно.
Мне нравится использовать Spring АОП с аннотацией @Profiled
. Это делает время очень чистым. У меня было несколько сомневающихся в отношении производительности производительности, отличной от perf4j, и я мог бы легко предложить, что я мог бы отключить ведение журнала, удалив TimingAspect
из моего файла context.xml Spring.
<!-- just remove and all uses of @Profiled do nothing -->
<bean id="timingAspect" class="org.perf4j.log4j.aop.TimingAspect"/>
Позаботьтесь о среднем значении и обратите внимание на максимальное значение. При выполнении настройки производительности у нас был вызов метода с дикими значениями с большим стандартным отклонением. Большая часть значений была вокруг медианной, однако было разбрызгивание звонков, которые были в 100 раз больше, чем в среднем. Больше пользовательской ошибки, чем что-либо, но не смотрите.
Я использую AsyncCoalescingStatisticsAppender
с временным интервалом 15000, но вряд ли читаю журнал. Поскольку у меня есть исходные журналы производительности, я могу нарезать и изменить это, запустив perf4j в командной строке.
Я опробовал интеграцию JMX и работает как обещано из документации. Но на данный момент у меня нет реального использования.
У меня есть планы по предоставлению данных с использованием SNMP, и если это полезно, я буду вносить свой вклад.
В целом, я рекомендую Perf4j.
Ответ 2
Я использую Perf4J в клиент-серверном приложении для вызова RPC-вызовов. Это было довольно просто реализовать: мне нужно было включить несколько строк кода вокруг сервлета диспетчера RPC для измерения каждого вызова метода RPC. Измерения времени записываются в отдельный файл журнала, агрегированные данные хранятся в памяти для использования с графическим сервлетом. Конфигурация составляла несколько минут.
Это выдержка из метода preHandle():
request.setAttribute("stopWatch", new CommonsLogStopWatch());
Этот код из метода postHandle():
LoggingStopWatch stopWatch = (LoggingStopWatch)request.getAttribute("stopWatch");
stopWatch.stop(methodName);
Вот соответствующие разделы моего log4j.cfg:
<logger name="org.perf4j.TimingLogger" additivity="false">
<level value="info"/>
<appender-ref ref="CoalescingStatistics"/>
<appender-ref ref="statsAppender"/>
</logger>
<appender name="CoalescingStatistics"
class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender">
<param name="TimeSlice" value="60000"/>
<appender-ref ref="graphPatientChart"/>
</appender>
<appender name="graphPatientChart"
class="org.perf4j.log4j.GraphingStatisticsAppender">
<param name="GraphType" value="Mean"/>
<param name="TagNamesToGraph" value="getPatientChart,idleNotification"/>
</appender>
<appender name="statsAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="datePattern" value="'.'yyyy-MM-dd"/>
<param name="file" value="WEB-INF/log/meona-performance.log"/>
<param name="append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
</appender>
Я хочу, чтобы сервлет серфинга был более интерактивным: было бы неплохо, если бы я мог выбрать теги, которые будут включены в график. Вы встретили приложение пользовательского интерфейса, которое можно использовать для анализа журналов измерения времени?
Ответ 3
Я использовал Perf4J и, в конце концов, отбросил его, потому что я уже использовал Spring AOP. Я хотел бы просто интегрировать эти два, но имел проблемы с ним (из-за Perf4J-приложений).
Я попытался использовать Perf4j через аннотации и AOP без JMX.
Вы можете обрабатывать файлы cfg через файлы конфигурации.
В целом мне понравился подход Perf4j, но поскольку я уже использовал Spring для мониторинга производительности, мне не нужен perf4j. Одна вещь, которую Perf4j дает бесплатно, - это min/max/standard dev; с другими библиотеками вы должны были бы сделать математику самостоятельно.
Я считаю, что perf4j хорош, если у вас нет другой библиотеки lib, которая может обеспечить перехват (aspectJ или AOP), но поскольку у меня уже было Spring, было проще реализовать измерение производительности. Вы можете легко открыть свойства bean через JMX с помощью Spring.