Как найти ресурсоемкий класс в Java? - PullRequest
14 голосов
/ 01 июня 2010

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

Ответы [ 7 ]

15 голосов
/ 01 июня 2010

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

6 голосов
/ 02 июня 2010

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

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

4 голосов
/ 01 июня 2010

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

3 голосов
/ 01 июня 2010

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

2 голосов
/ 01 июня 2010

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

1 голос
/ 02 июня 2010

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

1 голос
/ 01 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...