http://wm-monitoring.ru/ ')) {alert('Спасибо за то что установили нашу кнопку! =)');} else {alert('Очень жаль! =(');}"> http://wm-monitoring.ru/

Что такое профайлер java

Опубликовано: 01.09.2018

Ни один из инструментов, кроме JXInsight, не выполняет истинный анализ транзакций базы данных:

Технология JXInsight Probe также является единственной, которую можно даже запустить в производство, поскольку мы делаем профилирование NetBeans с 20x и 100x YourKit в SPECjvm2008.

Тесты

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

Я должен подчеркнуть, что JXInsight предназначен для разработчиков программного обеспечения, а не только для специального сеанса профилирования. У нас есть более 4000 системных свойств для настройки среды выполнения и более 600 расширений технологий, поэтому может быть необязательно, если у вас есть сложная проблема для решения и / или использования тех же инструментов для разработки, тестирования и производства.

С уважением,

Уильям

Ответ, данный Уильямом Лаутом Oct 20 & ap0; 08 до 14:19

Я написал однажды, в основном, как попытку сделать «глубокий выбор» более удобным для пользователя. Когда вы запускаете метод вручную, он основан на образце, но вместо того, чтобы брать много маленьких образцов, вы берете небольшое количество больших выборок.

Вы можете сказать, например, что команда I (обычно вызов функции) стоит вам процентов X от общего времени выполнения, более или менее, как это показано в стек на X% образцов.

Подумайте об этом, потому что - ключевой момент . Стек вызовов существует до тех пор, пока программа запущена. Если конкретная команда I находится в стеке X% времени, то, если инструкция исчезнет, ​​X% времени исчезнет. Это не зависит от количества раз, когда выполняется I или длительности вызова функции. Таким образом, таймеры и счетчики не имеют смысла. И в некотором смысле, все инструкции являются инструкциями вызова, даже если они только вызывают микрокод.

Сэмплер основан на предпосылке, что лучше знать адрес I с точностью (потому что это то, что вы ищете), чем Знайте число X% точно. Если вы знаете, что можете сэкономить около 30% времени, перекодировав что-нибудь, неужели вы действительно беспокоитесь, что можете отключить 5%? Вы все еще хотите это исправить. Количество времени, котороеэто экономит, не меньше, больше не будет сделано, если вы точно знаете X.

Таким образом, можно взять образцы таймера, но, честно говоря, я счел необходимым вызвать прерывание пользователем, одновременно нажав на две клавиши Shift. Поскольку 20 образцов, как правило, много, и поэтому вы можете быть уверены, что будете брать образцы в нужное время (т. Е. Не дожидаясь участия пользователя), это было вполне адекватно. Другой способ состоял бы в том, чтобы убедиться, что только таймер подсчитывает, пока пользователь держит клавиши Shift (или что-то в этом роде).

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

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

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

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

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

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

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

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

Меня часто спрашивают, как попробовать программу, которая заканчивается миллисекундами. Ответ прост - оберните его во внешний цикл, чтобы сделать выбор в течение длительного времени. Вы можете узнать, что происходит в X% времени, удалить его, получить ускорение X%, а затем удалить внешний цикл.

Этот небольшой профилировщик, который я назвал Yapa (другой анализатор производительности), был основан на DOS и сделал небольшую демонстрацию, но когда у меня была серьезная работа, я бы отказался бы от ручного метода. Основная причина заключается в том, что для стека вызовов часто недостаточно информации о состоянии, чтобы рассказать вам, зачем проходить определенный цикл. Вам также может понадобиться знать другую информацию о статусе, чтобы у вас было лучшее представление о том, что программа делала в то время. Поскольку я считаю, что ручной метод вполне удовлетворительный, я помещаю этот инструмент.

То, что часто игнорируется при профилировании, заключается в том, что вы можете сделать это несколько раз, чтобы найти некоторые проблемы. Например, предположим, что команда I1 представляет собой стек 5% времени, а I2 - это стек 50% времени. Двадцать примеров могут легко найти I2 , но не могут быть I1 . Итак, вы исправляете I2 . Затем вы начинаете все заново, но теперь I1 составляет 10% времени, поэтому 20 образцов, скорее всего, его заметят. Это позволяет повторить эффект увеличения использования профилирования, чтобы еще хуже ускорить фактор ускорения.

Профилирование производительности Java с использованием JConsole и VisualVM

Тед Нюворд

Опубликовано 19.10.2012

Как вы думаете, вы все знаете о программировании на Java? Фактически, большинство разработчиков только очищают поверхность платформы Java, изучая достаточно, чтобы выполнять свою работу. Это Тед Ньюард более глубоко в функциональности возможностей платформы Java, раскрывая малоизвестные факты, которые могут помочь решить самые сложные задачи программирования.

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

Однако с появлением JConsole в Java 5 все изменилось. JConsole - это интегрированный профилировщик производительности Java, который запускается из командной строки и оболочки GUI. Это не идеально, но это первая линия защиты более чем достаточно, когда босс говорит вам о проблемах с производительностью - и это лучше, чем Google.

В этой статье 5 секретов ... Я покажу вам пять простых способов использования инструмента JConsole (или его визуально продвинутого компаньона VisualVM) для мониторинга производительности приложения Узкие места Java и монитора в коде Java

Этот материал -. пути познания Развивайте свои навыки. Смотрите:

Многие программисты Java не знают, что из Java 5 JDK включает в себя инструмент профилирования. JConsole (или, в более поздних версиях платформы Java, VisualVM) является интегрированным профилировщиком, который может работать так же легко, как компилятор Java. Просто вызовите jconsole из командной строки, если в переменной PATH есть JDK. GUI-shell, перейдите в каталог установки JDK, откройте папку bin и дважды щелкните jconsole .

Когда будет выполняться профайлер (в зависимости от версии Java и количества других программ на основе Java в то время), диалоговое окно с просьбой о подключении URL-адресов или список локальные процессы Java. иногда содержащий сам процесс JConsole

JConsole включен во все выпуски платформы Java, начиная с Java 5. VisualVM - это продвинутый профилировщик,основанный на платформе NetBeans, который появился где-то в обновлении Java 6 12. Большинство организаций еще не переключилось на Java 6, поэтому в этой статье речь идет о JConsole. Однако большинство советов имеют отношение к обоим профиляторам. Примечание : VisualVM не только включен в Java 6, но также предоставляется отдельно. См. Раздел.)

В Java 5 процессы Java не настроены по умолчанию для профилирования. Когда вы запускаете аргумент командной строки -Dcom.sun.management.jmxremote указывает виртуальную машину для Java 5, вам нужно открыть соединение с профилировщиком, чтобы найти их. Когда JConsole контролирует процесс, дважды щелкните его, чтобы начать профилирование.

Профилеры делают свои собственные затраты, поэтому стоит потратить несколько минут на их оценку. Самый простой способ узнать стоимость JConsole - запустить приложение отдельно, затем под профилировщиком и измерить разницу в производительности. (Приложение не должно быть слишком большим или слишком маленьким, моим любимым примером является SwingSet2, который поставляется вместе с JDK). Сначала я попытался запустить SwingSet2 с параметром -verbose: gc , чтобы увидеть циклы сбора мусора, а затем запустить одно и то же приложение с подключенным профилировщиком JConsole. С JConsole наблюдалась регулярная последовательность циклов GC, что не было иначе. Он обеспечивает производительность профилировщика.

Профилировщики веб-приложений требуют связи через сокет, поэтому небольшая настройка на JConsole (или на любом профилировщике на основе JVMTI) для команд / профилированных удаленных приложений.

Например, если Tomcat запущен на компьютере с именем веб-сервера и JMX, что JVM включен и прослушивает порт 9004, подключите его к JConsole (или тому подобное другой JMX-клиент), вы должны указать URL-адрес JMX. По сути, все, что требуется для профилирования сервера приложений, работающего в удаленном центре данных, является URL-адресом. -address JMX. (Для получения дополнительной информации о дистанционном мониторинге и управлении через JMX и JConsole см. Раздел).

О проблемах с производительностью в коде приложения реагируют по-разному, но все эти реакции предсказуемы. Разработчики, которые программируют первые несколько дней Java, скорее всего, запустит старую среду IDE и начнут видеть основные части базы исходного кода, ищущие знакомые «красные флаги», такие как синхронизированные блоки, размещение объектов и т.д. Менее опытный разработчик, скорее всего, покроет флаги -X , поддерживаемые JVM, ища способы оптимизации сборщика мусора. Новичок, конечно же, отправится прямо в Google, надеясь, что кто-то нашел волшебную виртуальную машину Java «Accelerator», и им не нужно переписывать какой-либо код.

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

В JConsole есть несколько вкладок, которые полезны для сбора статистических данных! в частности:

память : контролировать работу разных кучек в коллекторе JVM bin; Темы : для изучения текущей цели JVM; категории : для мониторинга общего количества загруженных классов VM

Эти вкладки (и соответствующие графики) являются объектно-ориентированными JMX, что каждый реестр Java VM 5 и выше JMX-сервера интегрирован в JVM. Полный список модулей для этой виртуальной машины Java отображается на вкладке MBeans, а также метаданные и ограниченный пользовательский интерфейс для отображения этих данных и выполнения операций. (Однако запись уведомления выходит за пределы пользовательского интерфейса JConsole.)

Предположим, что процесс Tomcat «медленный» из-за ошибок, таких как OutOfMemoryError . Чтобы узнать, что происходит, откройте JConsole, перейдите на вкладку «Классы» и отслеживайте количество классов. Если их число постоянно увеличивается, мы можем предположить, что где-то на сервере приложений или в вашем коде просочился ClassLoader , а пробел PermGen скоро будет исчерпан , Если вам нужно дополнительное подтверждение проблемы, перейдите на вкладку «Память».

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

Начните с перехода на вкладку MBeans, где вам нужно найти , затем HotSpotDiagnostic. . Выберите Operations , и вы увидите кнопку dumpHeap в правой панели. Если первое поле ввода (String) dumpheap указывает имя файла для дампа, оно отображает текущее состояние всей кучи JVM и сохраняет его в файле.

Позже вы можете использовать разные коммерческие профилировщики для анализа файла или VisualVM - для синтаксического анализа моментального снимка. (Помните, что VisualVM присутствует в Java 6, а также доступен для отдельной загрузки.)

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

В JConsole хорошая новость заключается в том, что вся программа написана на «хорошем старом языке Java»: , Утилита могла написать любого Java-программиста. JDK даже включает пример конфигурации JConsole, создавая новый плагин (см. Раздел). В VisualVM, построенном поверх NetBeans, концепция плагина идет намного дальше.

Если JConsole (а также VisualVM или любой другойИнструмент) - это не то, что вам нужно, или не следует тому, что вы ищете, или нет, как вы пожелаете, вы можете попробовать написать свое собственное. И если Java-код кажется слишком тяжелым, всегда под рукой Groovy, JRuby или любой из дюжины других JVM-языков, которые помогут вам сделать это быстрее.

На самом деле, довольно простой инструмент на основе командной строки, подключенный через. JMX, который позволяет точно отслеживать данные, которые вас интересуют, именно так, как вам нужно.

Производительность отслеживания Java не заканчивается JConsole или VisualVM - в кеше JDK некоторые количество инструментов, которые большинство разработчиков не являются подозрительными. В следующей статье в этом мы рассмотрим некоторые экспериментальные установки в командной строке, которые помогут «выкопать» больше данных о производительности. Поскольку эти инструменты обычно ориентированы на конкретные данные, они меньше и легче, чем полный профилировщик и, следовательно, имеют меньшее влияние на производительность.

Оригинальная статья :. : серия статей, содержащих полезные советы для программирования на Java (Sun Microsystems) :. Более подробная информация об использовании JMX и встроенных инструментов виртуальной машины Java для отслеживания и краткое введение в разработку плагинов с использованием API-интерфейсов JConsole ( ). Производительность приложений Java (Мэнди Чунг, Java.net, май 2008 г.). Дастин Маркс, разработка программного обеспечения Дастина. Соображения и спекуляции, июнь 2009 г.) Инструменты контроля и контроля Интегрированный JDK, включая JConsole и VisualVM. (Andrew Wilcox, developerWorks, март 2006 г.). : Пример использования интерфейса агентов Java 5 и AOP Чтобы создать специальный профилировщик Profiler Java :. Центр здоровья - недорогие диагностические инструменты для мониторинга работы виртуальной машины IBM Java. .

> В JDK / bin есть jvisualvm.exe, который является профилировщиком VisualVM. Свободный и престижный>. Для начального анализа этого достаточно с головой.

Это именно оригинальный SUN JDK? У меня есть Open. Кажется, его там нет.

Отправлено ActualForum NNTP Server 1.5

р>

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

Andrew Pangin (Одноклассники) недавно создал один из этих инструментов: JPoint конференции в апреле, он представил opensorsny проект через не страшен точку восстановления. Другой эксперт в этой теме - Nitzan Vakart на одной и те же проблемы со многим safepoints узнал его «Почему (больше) образец Java Профайлеров являются чертовски страшно» р>.

Мы решили поговорить с обоими, начать разговор с последними новостями о асинхронном-Profiler, а затем перейти в состояние Java профилирования в целом.

JUG.ru: Недавно асинхронный профайлер был перемещен в штате GitHub хранилище Эндрю - это инструмент для профилирования-JVM, и что вызвало движение

?

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

Андрей Совершенно верно. Когда стало ясно, что асинхронным профилировщиком интересной Java сообщества, я решил перейти в нейтральное положение, так как сторонние разработчики иногда плохо kontribyutit комфортно в другом личном депозите.

Nitzan: Виртуальная машина Java-инструментов профилирования там, асинхронный профайлер и они подходят к той же теме с разных точек зрения: PERF-карта агент обеспечивает возможности профилирования с использованием Linux PErF , честный Profiler использует AsyncGetCallTrace, чтобы избежать смещений SafePoint и асинхронный профайлер сочетает в себе два в очень приятном способе.

Андрей Да. На самом деле, идея сочетания обоих подходов, нет ничего космического, но по какой-то причине, это никогда не происходит ни с кем.

Nitzan: В общем, он был в студии Solaris, но проблема Solaris Студии является то, что она используется около 20 людей в мире

.

Эндрю Но, насколько я знаю, он не показывает вызывает ядро, не так ли?

Nithsan: Отображает машинный код, но не ядро.

JUG.ru: С честным и асинхронной-Profiler Profiler общее преимущество «без смещения точки восстановления», теперь считает, что JVM-профилирование инструменты для выпуска начинающих могут появиться в профилировании, «Какой из двух подобных инструментов, которые я должен использовать? «Что вы можете сказать?

Эндрю Я думаю, что асинхронный профайлера далеко вперед с точки зрения точности профилирования и полноты информации. В конце концов, даже в AsyncGetCallTrace HotSpot не всегда работает: в некоторых случаях границы JVM не может восстановить трассировки стеки, а асинхронный-профайлер и иметь дело с такими ситуациями. Кроме того, Честный Profiler не показывает вообщесобственные трассировки стека. Но его большое преимущество заключается в инфраструктуре вокруг представления данных. Он может отображать результаты, имеет пользовательский интерфейс, а асинхронный профилировщик - это просто агент Java, который запускается с консоли.

Ницан: Я думаю, что будущее для асинхронного профилирования. И я хотел бы получить некоторые возможности, которые Honest Profiler имеет в асинхронном профилировщике. Существует также разница в том, что Honest Profiler работает на macOS, а асинхронный профилировщик еще не существует: важно поддерживать большое сообщество хипстеров в нашей отрасли.

JUG.ru: Кажется, что Вадим Цеско из его одноклассников уже разрешил работать с async-profiler macOS

?

Andrew: Это было до того, как я добавил поддержку перфомансов. Конкретный вызов Linux нарушил поддержку macOS. Но есть хорошие новости: несколько дней назад я разговаривал с Apple Norman Maurer (автор Netty), он также интересный асинхронный профилировщик, и он любезно согласился сделать Mac-порт р>.

JUG.ru: В июле асинхронный профайлер появился профайлер-хип - вы можете нам рассказать об этом?

Andrew: Существует два основных подхода к профилированию памяти Java. Первый - это инструмент байт-кода. Но для производственных систем это ужасно, потому что это плохо для производительности. Ряд оптимизаций компилятора перестает работать: во-первых, анализ эвакуации больше не позволяет избежать выделения в бедро.

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

Но это еще не все. Существует более эффективный подход, основанный на выборке TLAB (Thread Local Allocation Buffer). Он реализован в Java Mission Control / Java Flight Recorder, но требует включения коммерческих функций Oracle JDK, а с OpenJDK не работает вообще. используются в Google, но необходимо создать модифицированную версию JVM.

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

Нитсан: Я думаю, что это важно. Поскольку Java Mission Control, вероятно, единственный инструмент для профилирования распределений, и использование подобных процессов в JMC реализовано очень специальным образом, многие просто не делают этого профилирования. Я надеюсь, что это поможетПрофилирование прибыли становится основным.

JUG.ru: Может показаться странным, что значительный прогресс в профилировании происходит в 2017 году, когда это было бы полезно много лет назад. В чем причина этой задержки?

Эндрю: Ява - корень всего зла :) Это делает жизнь лучше и хуже. С одной стороны, из-за функциональности JVM стандартные подходы неприменимы, но, с другой стороны, JVM предоставляет свой собственный API для профилирования.

Ницан: Я думаю, что мир Java похож на Windows. Windows была ужасной операционной системой (вероятно, теперь намного лучше), но, страдая от многих недостатков, это было одновременно большим успехом. Та же история с Java. В случае инструментов профилирования Java это пошло не так. Я не совсем уверен, почему это так.

Я думаю, что разработчики JVM традиционно использовали Solaris Studio, поэтому все работало более или менее нормально, но только для них. Специалисты использовали специализированные инструменты. И большинство разработчиков Java были довольны тем, что у них было.

Но теперь Java пришлось столкнуться с реальностью. Натурное профилирование, которое работало в Solaris Studio, но было тогда нишевым решением, становится все более популярным.

Эндрю: Я считаю необходимым добавить, что Java не соответствует HotSpot, и что другие JVM могут быть более удобными для профилировщиков.

Ницан: Возможно, я что-то пропустил, но о какой JVM мы говорим? Я знаю много о Zing, и у меня есть опыт работы с IBM J9 ...

Andrew: Теперь у меня есть папка Excelsior JET, и я вспомнил этот проект. Он знает, как прекомпилировать Java с собственным кодом и, насколько я знаю, смещение safapoint не страдает.

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

JUG.ru: AsyncGetCallTrace, который использует async-profiler и Honest Profiler, не является официальным API. Считаете ли вы, что его использование - «взлом»? Не беспокойтесь, что в будущем это может перестать работать? Будет ли полезной формальная поддержка Oracle для профилирования?

Nithsan: Так как AsyncGetCallTrace работает с момента выпуска OpenJDK 6, кажется, что он всегда работал. Он «незаконнорожденный ребенок», но я не думаю, что егоможет взять и бросить. Когда что-то становится вариантом для FMV, оно каким-то образом получает официальную поддержку. Поэтому я думаю, что мы не должны слишком беспокоиться об этом. Хотя мне интересно, насколько хорошо AsyncGetCallTrace сочетается с новым компилятором Grail.

Конечно, более формальная поддержка поможет. В настоящее время Oracle предоставляет JMC в качестве платного варианта, а остальная часть мира Java имеет нечто вроде VisualVM. Теперь это деньги. Я думаю, что Oracle имеет конфликт интересов: интересы Java, с одной стороны, и их - с другой. Можно сказать, что было бы вредно для хорошей позиции, позволяющей им вносить вклад в улучшение других профилирующих JVM.

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

Andrew: Я согласен с тем, что AsyncGetCallTrace - отчасти это «хакерский» API. Более того, это далеко не идеально: я на ошибках. Но пока это лучшее, что есть у HotSpot JVM.

JUG.ru: И если в дополнение к уже существующим AsyncGetCallTrace было ли что-нибудь еще, что облегчило жизнь для создателей профайлера

?

Андрей Да. В последнее время в списках рассылки HotSpot обсуждалось профилирование распределений. В конце концов, даже появился, который предлагает новый стандартизованный API для отбора проб бедра. Я думаю, что поднимать такие темы в списках рассылки и предлагать JEP - это правильный путь. Итак, может быть, когда-нибудь в Java 11 ...

JUG.ru: Что вы думаете о будущем профилирования Java независимо от действий Oracle? Профилирование будет намного лучше, чем сейчас?

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

Nitcán: В ряде областей есть много возможностей для развития. С помощью PERF-card-agent мы приобрели способность следовать inline во время профилирования, но переходим к асинхронному профилировщику, теряя его снова. Мне бы очень хотелось увидеть ее снова.

Другая область - визуализация. Если вы используете async-profiler при работе с многопоточными приложениями, где один поток использует 100% CPU, а все остальные просто зависают, ожидая, пока профилирование может привести к запутыванию изображения. Меня интересуют проблемы представления данных, и я уверен, что есть много подобных проблем.

Андрей Да. Сегодня FlameGraph очень популярен как визуализация, но я бы сказал, что это далеко не идеально.

JUG.ru: Вы оба сказали (в отчетах и ​​блогах),что профилировщики могут создавать искаженное изображение. Считаете ли вы, что отрасль серьезно вредит использованию этого искаженного изображения? Может ли индустрия профилировщиков принести больше вреда, чем пользы?

Нитсан: Да, я думаю, что это вредит промышленности. Если вы смотрите интернет-чат о производительности Java, вы увидите, что у него полно пуль. И причина, по которой так много, заключается в том, что информация трудно проверить.

Некоторые люди сказали мне, что проблема никогда не происходит в HashMap. И причина, по которой они никогда не думали, что проблема HashMap может быть проблемой, заключается в том, что обычный профилировщик никогда их не покажет. Я не говорю, что у них есть проблема в их случае, но неважно, они никогда не узнают. И когда они смотрят на график потребления времени процессора, они не могут видеть время, затраченное на GC. Другими словами, в случае, когда «узкое место» у них есть GC, они не могут отслеживать его.

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

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

JUG.ru: Поэтому, чтобы улучшить ситуацию с профилированием Java, всем нам нужно работать не только для улучшения инструментов, но и для знания сообщества на

?

Нитсан: Да. Я думаю, что широкомасштабная история успеха в мире Java - JMH, Java Microbenchmarking Harness. И причина в том, что это решение было очень успешным не только с технологической точки зрения, но и в отношении обучения пользователей, что дало им возможность лучше узнать эту область.

Я думаю, что тот факт, что Андрей создает инструменты и разговаривает с людьми, очень важен.

Andrew: Даже самые мощные инструменты будут бесполезны, если вы не знаете, как их использовать. С тем же JMH: я много раз видел, как люди писали глупость в JMH, а затем сделали совершенно неверные выводы. Обучение является неотъемлемой частью успеха.

JUG.ru: вы оба поможете ему изучить их отношения со следующим Джокером, и вы оба отправитесь туда, чтобы представить новую версию отчетов, уже представленных на другие конференции. Что будетЕсть ли новинка?

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

Эндрю: Первоначально я планировал показать непрерывность истории асинхронного профилирования, начатую на JPoint 2017. Но мы, Программный комитет, нашли много общего с докладом мой отчет Ницан, поэтому я решил заняться новой темой. Пока я не готов точно сказать, что будет, но в ближайшем будущем можно будет увидеть мой новый отчет! Так что следите за обновлениями.

3 и 4 ноября в Санкт-Петербурге состоится конференция Java Joker , где выступят Ницан и Андрей. Как обычно, после отчетов, колонки Joker находятся в дискуссионных областях, поэтому вы можете задать им вопросы о личном профилировании. А кроме Андрея и Ницана будут десятки других ораторов - вы можете увидеть программу (и купить билет).

Автор: Евгений Трифонов

Что лучше карсил форте или эссливер форте

- - - ?

. ? - !

!

: . : [ ]1

Карта
rss