Приложение для профилирования с помощью VisualVM

Представьте, что у вас есть приложение командной строки, которое принимает входной файл и что-то с ним делает. Теперь представьте, что вы хотите протестировать / профилировать это приложение. Если бы это была Visual Studio, вы бы просто выбрали метод профилирования (выборка / инструментирование), и VS запустил бы приложение для вас и собирал данные, пока программа завершается. Но, насколько я понимаю, в VisualVM подобной функциональности нет. Вы должны запустить свое приложение, затем выбрать его в VisualVM, а затем явно запустить выборку / профилирование. Проблема в том, что иногда выполнение программы с определенными входными данными занимает меньше времени, чем требуется для настройки VisualVM. Также при таком подходе нет возможности пакетировать приложение профиля. Кто-то предложил запустить приложение в режиме отладки из Eclipse и установить точку останова где-нибудь в начале метода main (). Затем настройте VisualVM и продолжите выполнение. Но у меня есть подозрение, что работа в режиме Debug vs Release сама по себе влияет на производительность. Предложения?


person mmierins    schedule 11.12.2013    source источник


Ответы (2)


Появился новый плагин Startup Profiler для VisualVM 1.3.6, который позволяет профилировать приложение из его запуск. Дополнительную информацию см. В этой статье.

person Tomas Hurka    schedule 13.12.2013

Если программа выполняет ввод-вывод, сэмплер Visual Studio не будет видеть этот ввод-вывод, потому что он является «семплером ЦП» (даже если почти все время тратится на ожидание ввода-вывода).

Если вы используете Instrumentation, вы не увидите никакой информации на уровне строки, потому что она суммируется только на уровне функций.

Я использую эту технику.

Если программа выполняется слишком быстро для выборки, просто поместите вокруг нее временный внешний цикл, скажем, на 100 или 1000 итераций.

Разница между режимами отладки и выпуска будет практически нулевой, если только вы не проведете значительную часть времени в жестких циклах в своем коде, где циклы не содержат никаких вызовов функций, ИЛИ если вы выполнение операций со структурой данных, которые требуют большого количества проверок в библиотеках.

Если да, то ваши образцы покажут, что это так, и вы будете знать, что Release изменит скорость.

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

person Mike Dunlavey    schedule 11.12.2013