Какой поток Java hogging является ЦП?

Вы можете использовать:

UIFont *font = [UIFont boldSystemFontOfSize:16];

CGRect new = [string boundingRectWithSize:CGSizeMake(200, 300)
    options:NSStringDrawingUsesFontLeading 
    attributes:@{NSFontAttributeName: font} 
    context:nil];

CGSize stringSize= new.size;
58
задан Eddie 31 May 2009 в 00:58
поделиться

9 ответов

Try looking at the Hot Thread Detector plugin for visual VM -- it uses the ThreadMXBean API to take multiple CPU consumption samples to find the most active threads. It's based on a command-line equivalent from Bruce Chapman which might also be useful.

18
ответ дан 24 November 2019 в 18:47
поделиться

Если вы работаете под Windows, попробуйте Process Explorer . Откройте диалоговое окно свойств вашего процесса, затем выберите вкладку Threads.

2
ответ дан 24 November 2019 в 18:47
поделиться

Обратите внимание на плагин Top Threads для JConsole.

6
ответ дан 24 November 2019 в 18:47
поделиться

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

11
ответ дан 24 November 2019 в 18:47
поделиться

Возьмите дамп потока. Подождите 10 секунд. Возьмите другой дамп потока. Повторите еще раз. Проверьте дампы потоков и посмотрите, какие потоки застряли в одном месте или обрабатывают один и тот же запрос. Это ручной способ сделать это, но часто бывает полезно.

1
ответ дан 24 November 2019 в 18:47
поделиться

Вы используете Java 6 на многоядерном компьютере?

Скорее всего, вы страдаете от проблемы, которую я только что описал в статье о нехватке потоков.

См. ] Синхронизированный, Локальный, Справедливый.

1
ответ дан 24 November 2019 в 18:47
поделиться

This is a kind of hacky way, but it seems like you could fire the application up in a debugger, and then suspend all the threads, and go through the code and find out which one isn't blocking on a lock or an I/O call in some kind of loop. Or is this like what you've already tried?

0
ответ дан 24 November 2019 в 18:47
поделиться

Вариант, который вы могли бы рассмотреть, - это запросить ответы в ваших потоках изнутри приложения. С помощью ThreadMXBean вы можете запрашивать использование ЦП потоков из вашего Java-приложения и запрашивать трассировки стека нарушающих потоков.

Параметр ThreadMXBean позволяет вам встроить такой вид мониторинга в вашу жизнь применение. Он имеет незначительное влияние и имеет явное преимущество в том, что вы можете заставить его делать именно то, что вы хотите.

0
ответ дан 24 November 2019 в 18:47
поделиться

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

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

0
ответ дан 24 November 2019 в 18:47
поделиться
Другие вопросы по тегам:

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