Tomcat: настройка пропорций памяти

У меня есть экземпляр Tomcat, работающий на Windows 2008 Server с 4 ГБ ОЗУ. Сервер предназначен для этого приложения, поэтому я бы очень хотел, чтобы он мог выделить большую часть ОЗУ для Tomcat. Моя настройка Tomcat имеет следующие параметры java:

-Xms256m

-Xmx1600m

Я бы хотел увеличить объем оперативной памяти, желательно до 3 ГБ (очевидно, я знаю, как это сделать, просто увеличьте значение -Xmx). Тем не менее, Tomcat отказывается запускаться, если я увеличиваю максимальное пространство кучи за пределами 1600 МБ. Несколько веб-сайтов, которые я прочитал, говорят, что Tomcat не может использовать более 40% доступной оперативной памяти, что похоже на то, что я вижу.

Есть ли способ увеличить долю памяти, которую Tomcat может использовать, чтобы я мог увеличить объем памяти, который может использовать Tomcat?

Спасибо, Rik

Ответы

Ответ 1

Несмотря на наличие 64-битного сервера, у меня было только 32-разрядное Java/Tomcat. Я удалил Java и Tomcat и установил 64-разрядные версии, и все сработало нормально. кажется, что проблема в том, что 32-разрядная Java может обрабатывать только 1,5 ГБ.

Спасибо, Rik

Ответ 2

Ваша проблема, вероятно, связана с ОС, а не с Tomcat/Java. ОС Windows ограничивает выделение памяти 32-разрядным процессом до 2 гигабайт (по умолчанию).

Причина, по которой это позволяло вам выделять около 1,5 ГБ пространства, состоит в том, что для этого процесса также имеется другая память (накладные расходы JVM/библиотека, пространство perm gen и т.д.).

Почему 32-разрядная Windows накладывает ограничение на адресное пространство для процесса на 2 ГБ, но 64-разрядная версия Windows ограничивает ограничение на 4 ГБ?

Другие современные операционные системы [cough Linux] позволяют 32-битным процессам использовать все (или большинство) 4-битных адресных пространства.

Тем не менее, 64-битная ОС Windows может быть настроена на увеличение предела 32-разрядных процессов до 4 GiB (3 гигабайта на 32-разрядной версии):

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366778(v=vs.85).aspx

Однако, как вы правильно поступили, лучшим решением является использование 64-разрядной JVM с 64-разрядной ОС. Террабайт кучи кто-нибудь:

Максимальная память для 64-битной Java: D