Сделайте профилирование метода (Основное время выполнения) С Spring AOP

похоже, что человечность все еще фиксирует этот https://bugs.launchpad.net/ubuntu / + источник/Linux / + ошибка/978807

8
задан AMIC MING 1 February 2013 в 17:31
поделиться

4 ответа

Для этого есть встроенная поддержка в Spring.

Я попытался найти руководство, но, к удивлению, я не нашел его, поэтому я попытаюсь объяснить его здесь. (РЕДАКТИРОВАТЬ: я добавил этот пример в свой блог здесь )

В основном вам нужно расширить класс CustomizableTraceInterceptor следующим образом:

public class MyTraceInterceptor extends CustomizableTraceInterceptor {

  protected void writeToLog(Log logger, String message, Throwable ex) {
    if (ex != null) {
        logger.info(message, ex);
    } else {
        logger.info(message);
    }
  }


  protected boolean isInterceptorEnabled(MethodInvocation invocation, Log logger) {
    return true;
  }
}

Этот класс обертывает ваши bean-компоненты и выводит информацию о вызовах методов, включая параметры , возвращают значения и время выполнения в журнал. Изменяя метод writeToLog () , вы определяете, где вы хотите выводить данные и с какой степенью серьезности.

Теперь вам нужен XML, чтобы фактически выбрать, какие bean-компоненты вы собираетесь обернуть:

    <!-- Tracing -->

<bean name="traceInterceptor" class="MyTraceInterceptor" dependency-check="none">

    <property name="enterMessage" value="ENTER: $[targetClassShortName].$[methodName]($[arguments])"/>

    <property name="exitMessage"

              value="EXIT: $[targetClassShortName].$[methodName]() : $[invocationTime]ms : $[returnValue]"/>

</bean>

<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator" dependency-check="none">

    <property name="beanNames" value="*RequestListener,*Notifier"/>

    <property name="proxyTargetClass" value="true"/>

    <property name="interceptorNames">

        <list>

            <value>traceInterceptor</value>

        </list>

    </property>

    <property name="order" value="2"/>

</bean>

В основном вы определите bean-компоненты, которые вы хотите обернуть, с помощью подстановочного знака в beanNames, а «order» контролирует порядок упаковки - если вы этого не сделаете Если у вас есть другие классы АОП, вы можете их удалить. Вы также можете изменить формат вывода, если измените свойства enterMessage и exitMessage.

Этого должно быть достаточно, чтобы вы начали. Если вам нужны разъяснения, не стесняйтесь спрашивать.

13
ответ дан 5 December 2019 в 10:43
поделиться

Подход АОП будет работать, но в зависимости от того, как вы планируете регистрировать информацию, она сама может повлиять на производительность - просто помните об этом, убедитесь, что ведение журнала максимально эффективно и исправление ошибок в вашем аспекте.

Вы также можете выглядеть как Visual VM - я был впечатлен этим инструментом, он прост в использовании и смог предоставить мне только информацию Мне было нужно, когда я в последний раз его использовал.

1
ответ дан 5 December 2019 в 10:43
поделиться

Помимо VisualVM, о котором Ник упомянул, еще одним хорошим (и бесплатным для разработки) программным обеспечением является Oracle JRockit Mission Control . Его Консоль управления имеет возможность для простых вызовов профилей некоторых методов (плюс есть больше параметров профилирования и определенно быстрее, чем TPTP).

Как и с измерением системного времени до / после вызовов методов: в основном это работает но имеет некоторые незначительные «недостатки» (например, фоновые приложения могут «изменить» результат).

Лично я сначала выбрал бы VisualVM или JRockit Mission Control.

1
ответ дан 5 December 2019 в 10:43
поделиться

Проблема с "Profiler 101" состоит в том, что он воплощает множество идей, оправдание которых больше зависит от популярности, чем от здравого смысла.

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

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

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

Это метод, не зависящий от языка, который я использую.

ДОБАВЛЕНО:

1
ответ дан 5 December 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: