Время выполнения метода измерения для веб-службы Java в производственной среде
Я заинтересован в поиске лучшего способа измерения времени выполнения методов в веб-сервисе Java, над которым я работаю.
Служба будет развернута на нескольких клиентах и, следовательно, будет запущена в нескольких различных производственных средах (клиенты, как правило, имеют различные настройки в соответствии с их требованиями), и было решено, что служба должна регистрировать время выполнения для обработки запросов, чтобы обеспечить некоторую индикацию возможного проблемы с производительностью.
Пока что большинство предложений (таких как здесь и здесь), которые я видел, должны использовать System.currentTimeMillis()
в начале и в конце кода, который меня интересует, и вычисляют прошедшее время, но действительно ли это лучшее решение этой проблемы для производственной среды?
Насколько подходит System.currentTimeMillis()
для времени выполнения метода измерения, и есть ли альтернативы?
РЕДАКТИРОВАТЬ 0: чтобы уточнить, ключевым требованием является то, что это измерение выполнения должно быть развернуто как часть стандартного развертывания для сбора данных, чтобы к нему можно было обратиться, если возникнет проблема поддержки, связанная с производительностью, так как сервис является частью комплекса система новых и устаревших компонентов
3 ответа
Вы можете использовать класс Spring Framework 'StopWatch':
Вы даже можете использовать AOP, таким образом, вы можете профилировать код, не меняя его
System.currentTimeMillis() подходит, если вашему приложению потребуется более 1 или 2 миллисекунды (хотя его точность может быть больше, чем мс в зависимости от вашей ОС).
Вы можете предпочесть использование System.nanoTime(), которая может быть более точной, но не с наносекундами. Обратите внимание, что его точность также зависит от вашей базовой системы.
Оба эти метода довольно низкоуровневые (вам нужно управлять временными метками), но имеют меньшие издержки, чем более высокоуровневый API.
Запись прошедшего времени - это хорошо, но вам нужно рассчитать время на стороне клиента, чтобы действительно понять, сколько времени это займет. Это также скажет вам, сколько времени вы тратите на передачу данных, что может указывать на узкое место ввода / вывода.