Инструмент профилирования для Java-приложений - PullRequest
3 голосов
/ 13 апреля 2011

Мы работаем над веб-приложением, которое предварительно использует Struts2 + Spring 3.x + Hibernate 3.x. Мы рассматриваем возможность использования хорошего инструмента профилирования, чтобы избежать возможных проблем.

Я новичок в этой области, поэтому во время проведения исследования я нашел этих двух кандидатов

  • JProfiler
  • VisualVM

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

  1. Насколько уместно использовать профилировщик, поскольку проект все еще находится в середине.
  2. Так как мы будем использовать это изначально на система развития, поэтому я не думаю, что это точная копия производства и может быть много вопросов, которые просто выходят за рамки производства.
  3. Сколько ОС может иметь значение в профилировании результатов, как большинство из машина развития будет окном в то время как постановка и производство будет основано на Linux.

Пожалуйста, оставьте ценный отзыв.

Ответы [ 5 ]

3 голосов
/ 13 апреля 2011

Перейти с JProfiler. Я использовал это в течение 3 лет, это действительно здорово, особенно для профилирования процессора. VisualVM не обеспечивает такой детализации, как JProfile. Он распознает компоненты J2EE, а также дает точные SQL-запросы, запущенные в потоке. По моему опыту, 95% проблем с производительностью связаны с безответственными и ненужными попаданиями в БД.

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

Чтобы ответить на другие ваши вопросы,

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

  2. ответ Даффимо.

  3. Большая разница. Наши машины Linux с такой же конфигурацией обычно намного быстрее и отзывчивее, чем машины Windows. Но, как ответил Даффимо, профилирование дает вам горячие точки и процент времени, затраченного на каждый компонент и метод. Классы приложений с инструментами для профилирования работают как минимум на 50% медленнее, чем в обычном сценарии (мой опыт работы с JProfiler).

0 голосов
/ 13 апреля 2011

У меня очень хороший опыт работы с профилировщиком, встроенным в NetBeans.

Профилировщик в VisualVM является урезанной версией профилировщика NetBeans.

0 голосов
/ 13 апреля 2011

Если вы используете Eclipse и запускаете свой сервер разработки из Eclipse, тогда у вас есть блокировка на Eclipse TPTP .

0 голосов
/ 13 апреля 2011

У меня нет опыта работы с этими двумя, но мы действительно запускаем множество веб-приложений на Java (как контейнеры сервлетов, так и платформы игровых серверов).Наши серверы разработки и производства представляют собой сочетание Linux и BSD, в то время как наши разработчики используют практически все: Linux, MacOS, Windows.

Для всех наших потребностей в профилировании мы используем Yourkit (http://www.yourkit.com/). Обычно мы не выполняем большую работу по профилированию, чтобы выявить узкие места и т. Д. (Хотя мы это уже сделали), но это оказалосьотличный инструмент для обнаружения тупиковых ситуаций, утечек памяти, проблем с permgen и т. д.

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

0 голосов
/ 13 апреля 2011

VisualVM - потрясающий инструмент. Трудно поверить, что что-то настолько хорошее поставляется вместе с загрузкой JDK от Sun / Oracle. Я бы рекомендовал использовать JDK 6 и выше. Все, что вам нужно сделать, это получить PID приложения и передать его VisualVM; это сделает все остальное.

Вот ответы на ваши вопросы:

Насколько уместно использовать профилировщик, поскольку проект все еще находится в середине.

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

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

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

Сколько ОС может иметь значение в Профилирование результатов, как большинство из машина развития будет окном в то время как постановка и производство будет основан на Linux.

Я бы оценил его на Windows и Linux, если вы беспокоитесь. Я предполагаю, что это незначительно, но одноразовое измерение подтвердит или опровергнет это.

...