Как перехватить запрос Tomcat на уровне сокета? - PullRequest
2 голосов
/ 13 апреля 2010

Я изучаю производительность среды разработки веб-приложений на Apache Tomcat 6.

Я пытаюсь измерить затраты времени на обработку запросов HTTP.

Я хотел бы сделать следующее:

/

// just before first request byte is read
long t1 = System.nanoTime();

// request is processed...

// just after final byte is written to response
long t2 = System.nanoTime();

/

Тогда я бы вычислил общее время (t2 - t1).

Есть ли способ сделать это? Спасибо за вашу помощь!

Ответы [ 4 ]

1 голос
/ 13 апреля 2010

Я думаю, что вы можете достичь этого, добавив Filter и поместив свой временной код до и после вызова doFilter в остальной части цепочки фильтров.

1 голос
/ 13 апреля 2010

Лучший способ отследить это, вероятно, с помощью клапана .

Но я был бы удивлен, если бы это не отслеживалось в MBean-компонентах, экспортируемых Tomcat. В частности, MBean Catalina:name=http-<my port num>,type=GlobalRequestProcessor содержит следующие атрибуты:

BytesSent = 51829989
bytesReceived = 0
processingTime = 11464
ErrorCount = 8
maxTime = 1250
requestCount = 923
modelerType = org.apache.coyote.RequestGroupInfo

Посмотрите документацию по Мониторинг и управление Tomcat , чтобы узнать, как получить доступ к этим MBean-компонентам с помощью JMX.

1 голос
/ 13 апреля 2010

Одной из альтернатив, которая вообще не требует никакого кодирования, является просмотр сетевого трафика с помощью инструмента, подобного Wireshark .

0 голосов
/ 16 апреля 2010

AspectJ вы решение. С его помощью вы можете делать все что угодно ___ с классами, загруженными приложением CL (но не загрузочным CL).

...