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

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

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

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

3 ответа

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

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

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

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

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

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

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

Другие вопросы по тегам