что вызывает утечку памяти в Java - PullRequest
0 голосов
/ 08 июня 2011

У меня есть веб-приложение, развернутое на веб-сервере Oracle iPlanet 7. Веб-сайт активно используется в Интернете.

После развертывания размер кучи увеличивается, а через 2 или 3 недели выдается ошибка OutOfMemory.

Итак, я начал использовать инструмент профилирования. Я не знаком с кучей свалок. Все, что я заметил, - объекты char [], hashmap и String занимают слишком много места в куче. Как я могу заметить, что вызывает утечку памяти из дампа кучи? Мои предположения об утечке памяти;

  • Я делаю так много регистрации в коде, используя log4j для хранения в файле log.txt. Есть ли проблема с этим?

  • может быть ошибка удаления неактивных сеансов?

  • некоторые статические значения, такие как города, тип пола, хранящийся в статической хэш-карте?

  • У меня есть механизм входа, но нет механизма выхода. Когда сайт открывается снова, требуется новый логин. (глупо, но еще не реализовано.)?

  • Все

У вас есть представление о них или вы можете добавить еще одно предположение об утечке памяти?

Ответы [ 2 ]

1 голос
/ 05 декабря 2011

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

В качестве побочного узла Strings и char [] почти всегда находятся над данными профилировщиков.Это редко означает реальную проблему.

1 голос
/ 08 июня 2011

Поскольку в Java есть сборка мусора, «утечка памяти» обычно является результатом того, что вы сохраняете ссылки на некоторые объекты, когда они не должны поддерживаться живыми. Вы можете видеть только по возрасту тех объектов, которые потенциально являются старыми и хранятся, когда не должны.

  • log4j не должен вызывать проблем.
  • Хеш-карта должна быть в порядке, так как вы действительно хотите сохранить эти значения.
  • Неактивные сеансы могут быть проблемой, если они хранятся в памяти и если что-то хранит ссылки на них.
...