Профилирование Java: определить, какой фрагмент кода вызывает высокую загрузку процессора - PullRequest
8 голосов
/ 08 мая 2011

Я профилировал свой код с помощью JProfiler и YourKit.Однако я не смог выяснить, как определить, какой фрагмент кода отвечает за высокую нагрузку на процессор.

Обнаружение горячих точек тривиально, если время отклика плохое.В моем случае, хотя время отклика не является проблемой.Просто загрузка ЦП действительно высокая (на удивление высокая) в течение короткого времени, когда этот конкретный запрос обрабатывается.

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

Ответы [ 2 ]

6 голосов
/ 08 мая 2011

Загрузка процессора, по сути, указывает на количество циклов процессора, когда процессор должен был что-то делать, а не просто вертеть виртуальные большие пальцы.

Таким образом, если ваш запрос действительно выполняет реальную работу (вместо ожидания дискового ввода-вывода), то следует ожидать, что нагрузка будет высокой, пока работа выполняется, поскольку процессору есть, чем заняться.

То, на что вам нужно обратить внимание, - это исчерпание циклов ЦП, когда время отклика начинает расти.

Если ваша проблема в том, что запрос настолько короткий, что профилировщик не может показать вам то, что вам нужно, то подумайте об использовании автоматизированного инструмента, чтобы попросить его обработать сотни тысяч запросов. Это должно помочь.

1 голос
/ 08 мая 2011

Пока он обрабатывает, он на 100%.Пока он ждет (например, для ввода / вывода), он равен 0%.Между ними нет.Когда процесс занимает менее 100%, это скользящее среднее значение за последние N миллисекунд.

Если есть способ сделать его более эффективным, это займет меньше времени, не меньше процентов (обязательно).

Если вы хотите найти способ сделать так, чтобы это занимало меньше времени, предоставьте ему достаточную рабочую нагрузку и попробуйте это .

...