Как профилировать распределенное приложение в Java?

У меня есть приложение, работающее на сетке однородных java-процессов (потенциально на разных физических машинах). Я хотел бы собирать статистику использования процессора с одного запуска этого приложения. Я просмотрел инструменты профилирования, которые ищут возможность автоматического сбора данных, но не смогли найти их в netbeans, tptp, jvisualvm, yourkit и т.д.

Возможно, я искал неправильный путь?

Я думал:

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

но я не могу найти ничего даже отдаленно похожего на это.

Любые мысли, опыт, предложения?

Спасибо!

Ответ 1

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

Да, это обеспечит загрузку процессора.

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

Ответ 2

Если вы разрешили удаленный доступ JMX, и если вы используете SUN JDK 1.6, попробуйте использовать jvisualvm. Он имеет возможность удаленного соединения JMX. Хотя я не использовал его для профилирования процессора в распределенной среде.

Примечание. Для профилирования CPU ваше приложение должно работать на SUN JDK 1.6 или выше.

enter image description here

Посмотрите на эти ссылки:

Ответ 3

если вы посмотрите на что-то вроде zabbix (хотя есть и другие инструменты мониторинга), это позволяет собирать данные через JMX из Java-приложения. И если вы включите JMX в своем приложении и разрешите его запрашивать извне (через TCP/IP), у вас будет доступ ко многим внутренним частям (свободная память и т.д.), А также потоковым стекам и т.д. Тогда вы можете иметь эти значения, Что ж. Он нуждается в настройке, но то, что вы ищете, не может быть сделано с помощью одной строки script.

Ответ 4

Просто добавьте, что данные профилирования на каждом node обычно содержат метки времени.

Чтобы сопоставить эти временные метки, все машины должны иметь точно такое же время (максимум 10 миллисекунд)

узлы кластера должны синхронизироваться с сервером сетевого времени с одним источником (NTP)

Ответ 5

Вы можете использовать некоторую библиотеку JMX, например. jmxterm и оберните его в некотором коде, чтобы подключиться к нескольким хостам, чтобы опросить их для изменений. Если вы знакомы с Python, посмотрите на mys simple script здесь для некоторого вдохновения: http://rostislav-matl.blogspot.com/2011/02/monitoring-tomcat-with-jmxterm.html.

Ответ 6

http://www.hyperic.com/products/open-source-systems-monitoring

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

Ответ 7

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

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

Я не знаю, содержит ли он комбинированное представление о том, что происходит.

Ответ 8

Я искал нечто подобное и нашел Hyperic

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

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