Как найти интенсивный ЦП класс в Java?

У меня есть большая программа в Java, который использует многопоточность. В некоторых случаях программа начинает использовать 100% из трех ядер моих восьми базовых систем. В нормальной эксплуатации, использовании программы все ядра в 1-2%. Как я могу найти класс, это перегружает ядра?

14
задан Mike Dunlavey 2 June 2010 в 11:47
поделиться

7 ответов

Если вы используете Java поверх UNIX или некоторых версий Linux, поищите DTrace с Java.

1
ответ дан 1 December 2019 в 08:42
поделиться

Используйте профилировщик, например jvisualvm, который поставляется в комплекте с jdk-1.6.0_10

15
ответ дан 1 December 2019 в 08:42
поделиться

Лучшим решением будет использование профилировщика - именно для этого они и созданы, и в комплекте с Java 6 есть отличный профилировщик.

Другое (далеко не идеальное решение) - запустить вашу программу в Eclipse IDE (если вы используете именно ее) в режиме отладки. Затем вы можете посмотреть на запущенные потоки. Если многие из них приостановлены, то виновником может быть тот, который не приостановлен. Заставьте его прерваться (из панели инструментов), и вы сможете увидеть, где он находится. Есть много шансов, что вы найдете чистый цикл или занятое ожидание.

6
ответ дан 1 December 2019 в 08:42
поделиться

Используйте профилировщик, чтобы выяснить, какой поток(и) использует все циклы процессора, и какой метод(ы) они выполняют.

4
ответ дан 1 December 2019 в 08:42
поделиться

Если вы используете Eclipse, вы можете использовать инструмент профилирования TPTP.

3
ответ дан 1 December 2019 в 08:42
поделиться

Если вы идете по пути коммерческих профилировщиков, то я бы рекомендовал использовать Dynatrace.

2
ответ дан 1 December 2019 в 08:42
поделиться

Попробуйте взять дамп потоков (см. команды jps, jstack), а затем посмотрите, какие методы выполняются.

1
ответ дан 1 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: