Ответ 1
Используйте профайлер, такой как jvisualvm, который связан с jdk-1.6.0_10
У меня есть большая программа на Java, которая использует многопоточность. В некоторых случаях программа начинает использовать 100% трех ядер моей восьмиядерной системы. При нормальном использовании программа использует все ядра на 1-2%. Как я могу найти класс, который перегружает ядра?
Используйте профайлер, такой как jvisualvm, который связан с jdk-1.6.0_10
Лучшее решение - использовать профилировщик - то, для чего они созданы, и там отличный набор с Java 6.
Другим (далеким от идеала решением) является запуск вашей программы в Eclipse IDE (если это то, что вы используете) в режиме отладки. Затем вы можете посмотреть текущие потоки. ЕСЛИ многие из них приостановлены, тот, который не может быть вашим преступником. Заставьте его сломаться (с панели инструментов), и вы можете увидеть, где он находится. Есть много шансов, что вы найдете четкий цикл или ожидание.
Используйте профилировщик, чтобы выяснить, какой поток использует все ваши циклы процессора, и метод (ы), которые они выполняют.
Если вы используете Eclipse, вы можете использовать инструмент профилирования TPTP.
Если вы отправляетесь в коммерческий маршрут профайлера, я бы рекомендовал использовать Dynatrace.
Попробуйте взять дамп потоков (см. команды jps, jstack), а затем посмотрите, какие методы выполняются.
Если вы используете Java над UNIX или некоторые версии Linux, посмотрите в DTrace с Java.