Подтвердить что ты не робот

Вы использовали Perf4J для сбора и анализа показателей производительности в приложении Java?

Вы использовали Perf4J в своем приложении Java для сбора и анализа статистики производительности?

Каков был типичный шаблон (с использованием файлов журналов, утилит, пользовательского интерфейса, JMX и т.д.)?

Вы использовали аннотации и функции на основе AOP?

Использовали ли вы какую-либо интеграцию JMX?

Как вы справились с производственной конфигурацией?

Вы включали представления/отчеты о характеристиках производительности в качестве функции вашего приложения?

Расскажите, пожалуйста, почему и почему вы решили использовать альтернативную библиотеку/подход.

4b9b3361

Ответ 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.