Нужно знать, как использовать профилировщики / какой использовать - PullRequest
7 голосов
/ 16 июля 2011

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

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

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

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

Заранее спасибо и извините, что мой вопрос не совсем о программировании, но, похоже, это лучшее место для получения ценной информации о профилировщиках.

Ответы [ 3 ]

3 голосов
/ 16 июля 2011

Если вы запутались, , как и большинство поставщиков профилировщиков .

Первое, что нужно понять, - программы не медленные, потому что они имеют медленные части (узкие места). Они медленные, потому что делают больше, чем должны. У них время истощается.

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

Функциональный вызов, которого можно избежать, является примером утечки времени.

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

Создатели профилировщиков имеют в виду хорошо, но им мешает куча запутанных понятий.

Например, «где проводится время». Если это означает «где встречается программный счетчик чаще всего», это похоже на то, что лошадь находится на неправильной трассе. Вы могли бы попытаться сократить этот гоночный трек, но настоящая проблема в том, что лошадь даже не должна быть там. то есть есть вызов функции, которого следует избегать.

Например, «статистическая точность измерений». Вам нужно измерить, сколько лошади потребуется, чтобы обойти неправильный ипподром, чтобы понять, что он находится на неправильном ипподроме? Нет, вам просто нужно сделать снимок (образец стека). Чем дольше он находится на неправильной трассе, тем больше вероятность, что вы это увидите. Если вы видите это там дважды, вы знаете, в чем проблема.

Например, называть его «CPU Profiler», что является поводом игнорировать время ввода-вывода. Иногда трата времени - это ненужный ввод / вывод, о котором вы не знали. Это было бы похоже на то, как лошадь останавливается, чтобы жевать мешок овса. Если вы можете делать снимок только во время бега лошади, вы никогда не заметите . Вы бы только заметили, что время было подозрительно долгим.

Есть больше, откуда пришли ...

3 голосов
/ 16 июля 2011

Если вы ищете бесплатный инструмент, jvisulavm отличный вариант. Он поставляется со стандартной установкой JDK, его исполняемый файл обычно находится в каталоге bin JAVA_HOME, рядом с java, javac, javadoc и их братьями и сестрами. Вот учебник:

http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/index.html

Если вы ищете более продвинутый коммерческий продукт YourKit или jprofiler оба интересны.

1 голос
/ 16 июля 2011

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

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

Я не смог найти ни одного бесплатного профилировщика, который бы меня удовлетворил. Коммерческие, которые я использовал в разное время: JProbe и JProfiler . Мне больше понравился JProfiler, но оба позволяют получить результаты.

Как правило, процесс начинается с настройки вашего приложения внутри профилировщика и сообщения ему, какие классы вы хотите специально изучить. Когда вы запускаете свое приложение в профилировщике, классы инструментируются таким образом, что записывается информация о выполнении и виртуальной машине. Поэтому после запуска приложения вы можете проанализировать его, чтобы увидеть, какой код потребляет большую часть времени, а какие объекты используют большую часть памяти. Вы также можете часто отслеживать потоки, мониторы и ряд других вещей. Чтобы воспользоваться всеми данными, вам нужно хорошо разбираться во внутренностях ВМ и коде, который вы профилируете.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...