Измерение времени обработки запроса на сервере JBoss с использованием Mod_JK - PullRequest
1 голос
/ 12 октября 2011

Моя архитектура веб-приложения: Apache 2 (в качестве балансировщика нагрузки) + JBoss 3.2.3 + MySQL 5.0.19.

Я хочу: измерить время обработки запроса (для каждого отдельного запроса), затраченное только на сервер JBoss (т. Е. Исключая время, затрачиваемое на веб-серверы и серверы баз данных).

Я изучал, как регистрировать время обработки запросов только на уровне приложения. Я нашел * mod_JK logging *, * Apache mod_log_config * и Tomcat AccessLogValve как два возможных метода.

Использование * ведения журнала mod_JK *: в моем понимании ведение журнала mod_jk предоставляет время обработки запроса для каждого запроса и рассчитывает разницу между временем, когда запрос покидает сервер Apache, и временем, когда соответствующий ответ принимается сервером Apache. Пожалуйста, поправьте меня, если это не верно / правильно.

Использование модели mod_log_config Apache (http://www.lifeenv.gov.sk/tomcat-docs/jk/config/apache.html): путем добавления «% {JK_REQUEST_DURATION} n» в конструкции LogFormat (конструкция JKLogFile) (см. Ссылку выше). «JK_REQUEST_DURATION» фиксирует общее время обработки Tomcat из Apache в перспективе.

Время (в вышеупомянутых случаях) включает время обработки Tomcat / JBoss + MySQL. В моем случае это не поможет, поскольку включает время обработки MySQL - я хочу записывать время обработки запросов только на JBoss. Любые предложения / идеи приветствуются?

Использование AccessLogValve : он может регистрировать «время, затраченное на обработку запроса, в миллисах», установив% D в атрибуте шаблона XML-конструкции AccessLogValve. Не очень понятно, если это

  • Время, если это время, необходимое tomcat / JBoss для обслуживания запрос (например, выделить рабочий поток для его обработки)
  • Время, необходимое для обработки запроса и отправки его на сервер базы данных (общее время на сервере Tomcat / JBoss)
  • Время, необходимое для обработки запроса Tomcat / JBoss и отправки ответа вернуться к веб-серверу / клиенту

Есть идеи / подсказки?

Это мой опыт / исследование, которым я хочу поделиться. Было бы полезно, если бы у кого-то была похожая проблема / знать способ сделать это, чтобы поделиться своим опытом / указателями / мыслями, где можно найти лучшее решение.

с нетерпением жду ваших мыслей / предложений

Ответы [ 2 ]

0 голосов
/ 12 марта 2012

Я думаю, что вы ищете инструменты для профилирования, такие как java visualVM, JProfiler или другие ..

0 голосов
/ 05 ноября 2011

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

Если вы действительно хотите исключить время доступа к БД, вам необходимо снабдить свое приложение инструкциями по запуску / останову таймера. Это, безусловно, должно идти внутри вашего приложения («чисто» через AOP или вручную через операторы start / stop в критических точках приложения) и не может просто быть конфигурацией из внешнего мира (например, модуль apache).

Таким образом, вам нужно будет запустить таймер, когда вы получите запрос в самом начале цепочки обработки (здесь хорошо работает фильтр), и останавливаться при каждой отправке запроса. Затем начните снова точно после запроса. Это, конечно, не может быть выполнено на 100%, особенно если вы используете прозрачный ORM, такой как спящий режим. Это потому, что иногда вы можете выполнять запросы косвенно, то есть при обходе коллекции или ассоциации через простой Java.

...