Измерение времени обработки запроса на сервере JBoss с использованием Mod_JK

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

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

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

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

Используя модель Apache mod_log_config (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 и отправку ответа обратно на веб-сервер/клиент

Любая идея/подсказка?

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

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


person Noor Kaloon    schedule 12.10.2011    source источник


Ответы (2)


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

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

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

person cherouvim    schedule 05.11.2011
comment
Спасибо Cherouvim за ваши интересные моменты. Исключение времени базы данных было бы полезно для определения узкого места; на сервере приложений или сервере базы данных. В большинстве случаев время работы с базой данных не исключается, но это особый случай для приложения, которое я запускаю. Я думал о том, как вы изложили, но я ожидаю значительных накладных расходов на производительность. Я даже ищу существующие инструменты/конфигурацию сервера, которые естественным образом выполняют такие измерения. Я не хочу менять код приложения или сервера... так что должен быть плагин или около того - person Noor Kaloon; 17.11.2011

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

person webstrap    schedule 12.03.2012