Как рассчитать эффективное время выполнения потока в пуле потоков, а не время жизни потока? - PullRequest
0 голосов
/ 20 сентября 2019

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

Мой коллега отвечает за написание службы.Он использует технологию многопоточности Java, а пул потоков - Executors.newFixedThreadPool.Служба должна обрабатывать некоторую сложную бизнес-логику.Сложная бизнес-логика нуждается во мне, чтобы поддержать ее.Я написал модуль алгоритма, упакованный в виде банки, и время измерения давления модуля алгоритма составило в среднем около 10 мс.Конечно, это результат однопоточной среды.Когда он помещает мой модуль в программу и запускает его, при использовании программы тестирования давления для проверки службы поток вычисляет алгоритм более чем на несколько минут.Конечно, это время жизни потока.Когда одна машина использует программу, вызываемую с теми же параметрами, время по-прежнему составляет несколько миллисекунд.Таким образом, возникает проблема.Почему истекло время ожидания?

Мой коллега не предоставил мне более подробную информацию о программе.Он думал, что программа отнимает много времени.Я был очень зол на его поведение, но проблему всегда нужно было решать.Я не знаю много об алгоритме планирования потока, он также.Теперь я хочу подсчитать эффективное время выполнения потока, но я не увидел соответствующего метода в объекте java.lang.Thread, я не знаю, есть ли другие способы его подсчета.

Я также хочу знать, есть ли другой способ объяснить эту проблему.

1 Ответ

1 голос
/ 20 сентября 2019

Я считаю, что вы ищете профилировщик .Профилировщик позволяет вам обрабатывать код во время выполнения без необходимости изменять исходный код (или упакованный jar-файл) для добавления логики измерения производительности.Профилировщик скажет вам время выполнения каждого потока, а также время, когда каждый конкретный метод был вызван / выполнен.

Существует много профилировщиков Java, как GUI, так и CMD.Попробуйте visualvm , jProfiler или Java Mission Control , чтобы назвать несколько

...