используемая память даже после завершения работы jvm - как мне ее освободить? - PullRequest
1 голос
/ 02 января 2011

Я запускаю Java-приложение, которое должно обрабатывать пакет файлов через какой-то модуль принятия решений. Мне нужно обработать партию примерно за 50 часов. Проблема, с которой я сталкиваюсь, заключается в том, что процесс работает нормально около часа, а затем начинает простаивать. Итак, я сделал это - я запускаю JVM в течение одного часа, а затем выключаю его, перезапускаю JVM через 30 минут, но все же по какой-то причине второй запуск занимает почти 4-5 часов. делать то, что делает первый прогон за 1 час. Любая помощь или идеи будут с благодарностью.

Я использую это на 64-битном сервере Windows R2, 2 четырехъядерных процессора Intel (2,53 ГГц), 24 ГБ ОЗУ. Версия Java - 1.6.0_22 (64-разрядная версия), памяти, выделенной для приложения, - куча (16 ГБ) и PermGen (2 ГБ).

внешний модуль также работает на jvm, и я тоже выключаю его, но у меня такое ощущение, что он удерживает память даже после выключения. до того, как я начну использовать JVM RAM, 1 ГБ, после того, как я закончу его, он, как правило, остается около 3 ГБ. Могу ли я попросить JAVA принудительно освободить эту память?

Ответы [ 4 ]

3 голосов
/ 02 января 2011

Вы уверены, что JVM, которую вы пытаетесь закрыть, действительно закрыта?

Как только процесс завершается, все выделенное ему ОЗУ больше не выделяется. У процесса нет возможности удержать его после его закрытия, что также означает, что вы не можете сказать ему об этом. Это делается операционной системой.

Честно говоря, это звучит так, как будто JVM все еще работает или что-то еще поглощает оперативную память. Кроме того, похоже, что вы пытаетесь обойти порочную ошибку, вместо того, чтобы охотиться за ней и убивать ее?

0 голосов
/ 03 января 2011

Из интереса: Вы пытались разделить процесс так, чтобы он мог работать параллельно?

Работа с 50 часами - большая работа!У вас есть приличный компьютер (8 ядер и 24 ГБ оперативной памяти), и вы сможете распараллелить некоторые его части.

0 голосов
/ 03 января 2011

я кое-что заметил в процессе.

После того, как я выключил JVM, если я удаляю все файлы, которые я записал в файловую систему, тогда использование ОЗУ возвращается к исходному 1 ГБ.

Приводит ли это к чему-либо, и могу ли я что-то с этим сделать.

0 голосов
/ 02 января 2011

Я подозреваю, что JVM вообще не выходит.Я регулярно вижу этот симптом с экземпляром JBoss, который останавливается с OutOfMemoryExceptions.Когда я убиваю JVM (через SIGTERM / SIGQUIT), JVM не выходит своевременно, так как он потребляет все свои ресурсы, выбрасывая / обрабатывая исключения OOM.

Внимательно проверьте журналы и таблицу процессов, чтобы убедиться, что JVM завершает работу правильно.В этот момент ОС очистит все ресурсы, связанные с этим процессом (включая использованную память)

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