Особенности профилирования поведения параллельной программы в Java - PullRequest
2 голосов
/ 17 февраля 2011

В настоящее время есть некоторые профилировщики, которые обещают профилировать параллельное поведение выполнения программы, чтобы понимать многопоточное выполнение.

Я собираю функции, которые были бы полезны для профилировщика Java, концентрирующегося только на профилировании параллелизма:1003 *

То, что я собрал до сих пор:

  • построение графиков ожидания для обнаружения потенциальных тупиков

  • измерение временидоступ к ресурсам (структурам данных и т. д.)

  • показывает состояния каждого потока (живой, прерванный, мертвый)

  • какой поток вызвал какойпоток для доступа к общим ресурсам (ожидание, блокировка и т. д.)

Какие у вас есть идеи?Лично я стремлюсь раскрыть некоторые вредные привычки программирования при работе с параллелизмом в Java.

Ответы [ 4 ]

1 голос
/ 17 февраля 2011

Сводная статистика по каждому потоку: сколько времени проводят в каждом состоянии (работает, работает, заблокирован и т. Д.).

0 голосов
/ 18 февраля 2011

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

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

0 голосов
/ 18 февраля 2011

Любой

  • Контролируемый монитор или блокировка
  • Ошибка CAS
  • Изменчивое чтение и запись

Что было бы фантастическим, было быспособ увидеть общие данные, которые не были защищены ранее, и, следовательно, были неестественными.Трудно сделать, хотя.

0 голосов
/ 17 февраля 2011

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

...