Обнаружение, какой поток Java мешает выполнению моего метода

jvm jvm-arguments java-threads

74 просмотра

4 ответа

868 Репутация автора

Я сталкиваюсь со сложной проблемой с моим текущим кодом (который довольно большой). Чтобы выполнить мою задачу, мы должны были сделать много вызовов методов вокруг 100-120 вызовов методов (пожалуйста, не спрашивайте меня, почему я это делаю, это полностью отделенная реализация). Чтобы дать больше контекста, это Java-приложение Swing. Когда я выполняю свое действие в 10 раз, требуется около 3-4 итераций, чтобы выполнить действие очень высоко (примерно на 300 миллисекунд). Я попытался добавить больше журналов, чтобы найти, какой вызов метода занимает больше времени. Что я могу заметить, так это то, что пики не всегда находятся в одном месте, когда я добавляю больше журналов, я вижу, что пики выдвигаются немного выше, когда я удаляю какой-то кусок кода, пики перемещаются чуть ниже. Это ясно показывает, что какой-то фоновый поток фактически блокирует мое выполнение (может быть из-за нарезки потока или истощения потока), что-то может быть причиной. Подходя к вопросу, я не знаю, какой фоновый поток прерывает меня. Поэтому я хотел бы знать, есть ли какой-либо способ (через параметры времени выполнения Java), чтобы я мог печатать в консоли, какой поток приостановлен, и какой поток возобновляет свое выполнение?

Автор: Rengasami Ramanujam Источник Размещён: 16.07.2016 09:24

Ответы (4)


0 плюса

1 Репутация автора

Чтобы узнать имя потока, вызывающего метод, попробуйте это:

public void myMethod(){
    String threadName = Thread.currentThread().getName();
    System.out.println("Thread name : " + threadName);
}
Автор: csatrio Размещён: 16.07.2016 06:43

0 плюса

462992 Репутация автора

У меня есть поток мониторинга, который периодически проверяет, что задание, чувствительное к задержке, выполняется вовремя. Когда этого не происходит, он печатает трассировку стека потока (и, возможно, любых других интересующих потоков). Это может быть полезно для отслеживания неясного дрожания задержки.

Автор: Peter Lawrey Размещён: 16.07.2016 07:17

0 плюса

1294 Репутация автора

Отладчик Eclipse IDE может показать, что поток ожидает другого ( отладка синхронизации Java ). Вы должны прекратить казнь в нужный момент времени, чтобы увидеть, что происходит.

Автор: mm759 Размещён: 16.07.2016 07:56

0 плюса

4391 Репутация автора

Это ясно показывает, что какой-то фоновый поток фактически блокирует мое выполнение

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

Автор: ravthiru Размещён: 29.07.2016 04:19
Вопросы из категории :
32x32