Не удалось выделить достаточно места в куче для Java - PullRequest
4 голосов
/ 26 апреля 2011

У нас есть приложение, которое работало нормально в течение одного года. Это веб-приложение, работающее под управлением Tomcat 5.5 + JDK 1.5 под Microsoft Cluster в Windows Server 2003 Enterprise Edition с пакетом обновления 2. Сервер имеет 11 ГБ ОЗУ (я знаю, что это бесполезно!) Со следующим описанием «Расширение физического адреса» Я не знаю, что это значит.

Служба Tomcat настроена со следующими параметрами: -Xmx1024m -Xms128m

С прошлой недели служба больше не хочет запускаться и останавливается со следующим сообщением об ошибке: «Не удалось выделить достаточно места в куче».

Мы попробовали несколько тестов:

  • java -Xmx1024m -version => Ошибка
  • java -Xmx758m -version => Ошибка
  • java -Xmx512m -version => Пройдено

Таким образом, мы можем использовать меньше памяти для максимального размера кучи, но это не приемлемый обходной путь, потому что число пользователей увеличится через несколько месяцев, и нам нужно установить максимальный размер кучи равным 1024 МБ.

Также я не понимаю, почему это работало нормально, а потом вдруг перестало работать! Похоже, что ОС теперь не может выделять непрерывную память или что-то еще (размер файла подкачки, распределение пользовательской памяти, ...)

Довольно сложно узнать, что-то изменилось (исправление ОС, конфигурация, ...), потому что веб-приложение запущено на клиентском сервере, и у нас нет к нему доступа.

Ответы [ 4 ]

6 голосов
/ 26 апреля 2011

Java требует непрерывной памяти.В 32-разрядных ОС это ограничивает размер от 1,2 до 1,4 ГБ в Windows.Однако, если ваша память фрагментирована из-за других работающих программ, вы можете получить гораздо меньшую область памяти.

Вы не столкнетесь с этой проблемой в 64-битной ОС, и вы даже можете выделить гораздо большепамяти для jVM (если вы используете 64-битную JVM)

1 голос
/ 30 января 2013

У меня есть новости о моей проблеме.

Возможно, это связано с обновлением безопасности Windows!Это обновление для системы безопасности Microsoft запрещает Java-приложениям выделять большой объем непрерывной памяти ...

Дополнительная информация здесь: http://support.microsoft.com/kb/971812

Мы проверим, исправит ли исправление эту проблему.Оставайтесь с нами

0 голосов
/ 26 апреля 2011

Это, вероятно, означает, что ОС не может выделить достаточно непрерывной памяти.У вас все еще есть проблема после перезагрузки ОС?Система сообщает, что она имеет 11 Гб оперативной памяти?Реализация PAE в Windows не самая лучшая, поэтому это может вызвать проблемы.Попробуйте обновить до новой версии JDK, если это не удастся, вам понадобится 64-битный компьютер.

0 голосов
/ 26 апреля 2011

Также я не понимаю, почему он работал нормально, и вдруг он перестал работать! Похоже, что ОС теперь не может выделять непрерывную память или что-то еще (размер файла подкачки, распределение пользовательской памяти, ...)

Довольно сложно узнать, что-то изменилось (исправление ОС, конфигурация, ...), потому что веб-приложение запущено на клиентском сервере, и у нас нет к нему доступа.

Ну, вы должны проверить, сколько памяти доступно, и если этого недостаточно, вы должны проверить, что потребляет столько памяти.

Кроме этого, вам нужно поговорить с вашим клиентом и выяснить, изменились ли они на сервере, и если да, то что они изменили.

Не зная больше, трудно или невозможно дать какой-либо квалифицированный совет о том, почему вы не можете выделить больше памяти.

...