Как собрать информацию о профилировании для приложения Java 1.4?

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

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

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

person magneticMonster    schedule 29.07.2009    source источник


Ответы (3)


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

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

person skaffman    schedule 29.07.2009
comment
YourKit — замечательный профилировщик — мы использовали его с большим успехом. Вы также можете попробовать сеансы удаленной отладки с помощью Eclipse, если сможете понять, как воспроизвести ошибку (например, установив время сервера на полночь?) - person aperkins; 30.07.2009
comment
@ Thorbjørn: отладчик, профилировщик, картошка, помидор ... здесь есть некоторое совпадение. Однако профилировщик предоставит больше данных о состоянии потока, даже если он не скажет вам, какой код выполняется. - person skaffman; 30.07.2009

Перво-наперво: вы анализировали дамп потока, когда ваше приложение зависало? В большинстве случаев у вас достаточно информации для устранения неполадок с зависшим Java-приложением...

Ctrl-Break в окне процесса в Windows или kill -QUIT [pid] в Linux.

person ykaganovich    schedule 29.07.2009
comment
Можете ли вы предложить способ автоматической отправки сигнала Ctrl-Break каждые 60 секунд? Таким образом, мне не нужно ложиться спать до 2 часов ночи каждую ночь, чтобы проверить это. - person magneticMonster; 30.07.2009
comment
Просто настроить задание для запуска сценария, который зацикливается в течение часа или около того? - person ShabbyDoo; 30.07.2009
comment
Но как отправить Ctrl-Break процессу Windows? - person magneticMonster; 30.07.2009
comment
Я не знаю специфики вашего приложения, но если вы можете запустить его из командной строки, и если оно зависнет посреди ночи, то вы можете просто ctrl-сломать его на следующее утро. Все равно повесят :) - person ykaganovich; 30.07.2009
comment
Вы должны иметь возможность отправлять Ctrl-Break по расписанию, используя что-то вроде AutoIt. - person iboisver; 18.04.2012

Я бы сначала попытался определить, действительно ли это ваше приложение или что-то еще.

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

Так было всегда или недавно началось. Если это новое, посмотрите, что изменилось в коробке в целом, а не только в вашем собственном приложении.

person Keibosh    schedule 29.07.2009
comment
Над этим аспектом работает еще пара человек. Поскольку он находится на территории заказчика, у нас не так много времени в любой конкретный день для диагностики, поэтому мы пытаемся собрать как можно больше сразу. - person magneticMonster; 30.07.2009