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