Точка останова входа многопоточного метода, вызывающая сканирование JVM - PullRequest
4 голосов
/ 19 января 2012

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

Согласно принятому ответу на этот вопрос SO, это, по крайней мере частично, связано с отключением JIT-компилятора Hotspot при установке точки останова на вход. Почему отлаживаемая программа так сильно тормозит при использовании отладки записей метода?

Однако моя JVM, похоже, работает на несколько порядков медленнее.Процесс, который я отлаживал, является многопоточным, и я отлаживал удаленно с помощью Eclipse.Просмотр диспетчера задач при установке точки останова на входе показал, что одно ядро ​​выполняет значительно больше работы, чем другие ядра.С удаленной точкой останова нагрузка на ядра была более равномерной.

Хотя хотя бы некоторую медлительность можно объяснить отключением JIT-компиляции, мне интересно, проверяют ли точки останова входа метода с процессом отладчика для каждоговызов метода, в результате чего потоки синхронизируются в удаленном процессе отладчика для каждого вызова метода.Мне кажется, это может вызвать более значительное замедление, чем потеря JIT.

1 Ответ

0 голосов
/ 16 марта 2012

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

Интерфейс отладки Java предоставляет политики приостановки потока событий, когдалюбая точка останова достигнута, и я думаю, что вы, вероятно, уже знаете эти правила.Я ожидаю, что общее количество рабочих потоков уменьшится, может быть, даже больше потоков, чем вы ожидали, были приостановлены, и в результате общая пропускная способность значительно упала.

Плюс, поскольку вы выполняли удаленную отладку, есть ливероятность того, что сеть испытывает задержки и т. д.? 1007 *

...