Ручным подходом к этому может быть создание фильтра для рассматриваемых сервлетов, затем вы можете измерить время, необходимое для выполнения всех выполнений, и сохранить их где-нибудь.
Это хорошо, потому что накладные расходы на профилирование вызовов не меньше, чем код, который вы пишете в фильтре, я также нашел очень полезным найти страницы и сервлеты, для загрузки которых требуется больше времени.
Так работают фильтры
- URL называется
- Фильтр входит и сохраняет URL-адрес и текущее время (startTime)
- Фильтр вызывает сервлет (-ы) назначения
- Выполняется сервлет (сервлет, страница или jsp)
- Элемент управления возвращается к времени выполнения фильтра: currentTime - startTime
- Записать или сохранить данные, полученные для будущего сравнения (т.е. сохранить их в CSV-файл)
- Фильтр заканчивается
Для этого создайте класс, который реализует интерфейс javax.servlet.Filter.
public class ProfilingFilter implements Filter {
public void init(FilterConfig fc){}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain){
long startTime = System.currentTimeInMillis();
String servletName = ((HttpServletRequest) req)..getPathInfo();
chain.doFilter(req, resp);
long executionTime = System.currentTimeInMillis()-startTime;
// Implement the following to store or handle the data.
logData(servletName, executionTime);
}
}
Теперь добавьте его в свой web.xml
<filter>
<filter-name>profilingFilter</filter-name>
<filter-class>com.awesome.ProfilingFilter</filter-class>
</filter>
И, наконец, отображение:
<filter-mapping>
<filter-name>profilingFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
Имейте в виду, что это отфильтрует ВСЕ, так что вы будете профилировать, html, jsp, сервлеты, изображения, а что нет.
Мы сочли это очень полезным, чтобы найти, что именно в приложении требовало слишком много времени для ответа или было очень тяжелым.
Вы можете даже включить это в рабочей среде на день или два для получения реальных данных, а производительность будет такой же, как ваш код, затраченный на сохранение данных профилирования.
Некоторые идеи: сохраните свою статистику на карте в контексте сервлета, а затем попросите другой сервлет отобразить эту статистику. таким образом, вам даже не нужен доступ к диску.