2013-08-06 4 views
0

Я пытаюсь проанализировать/профилировать основное приложение JAVA.Permgen Space: идеальное поведение должно быть достигнуто

Я использую JConsole с Eclipse MAT.

Я наблюдал следующее графах Пермь-Gen (данные, записанные в продолжительностью 1 час на машине Windows XP):

Код кэша:

  • При запуске записи: 7MB
  • После 1 час: 10,5 МБ
  • График выглядит так: наклонная линия слегка увеличивается с интервалом.

пула памяти Пермь-Gen (Shared-RW):

  • При запуске записи: 7MB
  • Через 1 час: 7 МБ
  • График выглядит следующим образом: параллельно оси X.

пула памяти Пермь-Gen (Shared-г0):

  • При запуске записи: 5.5MB
  • Через 1 час: 5.5MB
  • График выглядит следующим образом: параллельно оси X.

бассейн Память:

  • При запуске записи: 21MB
  • Через 1 час: 22,5 MB
  • График выглядит следующим образом: slantedline немного идет вверх/вниз увеличивается с интервалами.

Мой вопрос,

  • Что можно сделать вывод, такое поведение Пермь-Gen пространства для каждого из вышеуказанной категории?
  • Какое должно быть идеальное поведение для поиска каждой из вышеуказанных категорий?

Идеальное поведение здесь относится к состоянию, которое представляет:

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

Вышеуказанный вопрос применим и к анализу пространства кучи.

Ниже приведены дополнительные пояснения:

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

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

UPDATE 1:

  • Далее я побежал заявку на более чем 8 часов подряд.
  • Я использовал GCViewer: 1.31 для получения информации GC.
  • Я собираю данные, собранные с помощью GCViewer.
  • Я заметил, что каждые 30 секунд происходило одно ПОЛНОЕ GC-событие. Это делает вывод, что множество объектов - это log-living.
  • Мне нужна дополнительная информация. Я действительно не уверен, как правильно и полностью интерпретировать эти данные.

Пожалуйста, взгляните на приложение. Укажите данные.

enter image description here

+1

Какова Ваша производственная среда для этого кода? Если ответ не «Windows XP», вы тратите свое время. – kittylyst

+0

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

+0

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

ответ

1

Несколько предложений:

1) Ditch JConsole. VisualVM входит в состав JDK и является превосходным во всех отношениях (и включает режим моста, поэтому вы можете даже использовать старые плагины, если это все, что удерживает вас на JConsole).

2) Включите регистрацию GC. Вы должны по крайней мере, эти флаги:

-Xloggc: (для более полного протоколирования GC) -XX: + PrintGCDetails (для более подробного вывода) -XX: + PrintTenuringDistribution (отображает tenuring пороги, принятые в JVM)

Найдите инструмент для анализа журналов - вам нужно обратить внимание на рабочий набор объектов, а также на PermGen, даже если это ваша главная проблема. GCViewer свободен, или есть коммерческие инструменты (Полное раскрытие - я работаю для jClarity, который производит инструмент Censum для этой цели).

3) Вам нужно работать намного дольше 1 часа. Многие приложения не стабилизируются довольно долго.

4) Рассматривая ваши цифры снова, это не выглядит так, как обычно. Почему вы настраиваете этот бит JVM? Какой аспект системы показал, что это серьезная проблема, и над ней нужно работать? Как вы это определили и как эта проблема проявляется?

+0

Я нашел ваши предложения действительно полезными. Я следил за вашими рекомендациями. Пожалуйста, ознакомьтесь с обновленным вопросом. –

Смежные вопросы