Tomcat - есть ли способ выбросить текущие / активные запросы, которые еще не ответили? - PullRequest
0 голосов
/ 04 января 2019

Мне трудно отладить проблему с длительным временем отклика. Мое веб-приложение иногда требует много времени, чтобы ответить, и мне трудно найти конкретные запросы, которые являются виновниками. Проблема в том, что Tomcat регистрирует журнал доступа только после ответа на запрос. Мне интересно, есть ли способ либо регистрировать все входящие запросы в момент их поступления (и не ждать ответа), либо сказать tomcat выдать все запросы, которые он обрабатывает в настоящее время (что-то аналогичное jstack, но вместо этого показывать мне темы показывают мне текущие / активные URL запроса)?

1 Ответ

0 голосов
/ 04 января 2019

После обслуживания медленные запросы можно идентифицировать, активировав Extended Log Valve с помощью требуемого времени токена. Это не ваш реальный вопрос, как вы хотите видеть в режиме реального времени, но не ясно, если вы уже определили долгое время для ответа запросов.

VisualVM покажет вам запущенные потоки , но этого недостаточно, чтобы понять, что происходит. Возможно, вам снова нужно активировать Extended Log Valve, на этот раз с токеном x-threadname , чтобы сравнить с тем, что вы видели в VisualVM. Но для самой отладки решения, указанного выше (токен), обычно достаточно.

Но этого может быть недостаточно для выявления узкого места, особенно если приложение на самом деле вообще не имеет никаких проблем (и, похоже, это случайная проблема). Использует ли приложение базу данных? Если это так, активируйте медленный журнал запросов , например, с помощью MySQL . Использует ли он какой-либо другой уровень (аутентификация, NFS / CIFS, ..)? Если это так, вам нужно следить за их доступностью, если они что-то блокируют, когда они недоступны.

...