2009-10-30 2 views
1

В настоящее время я использую sun java 1.6 на кластере SL4.Где по умолчанию размер кучи JVM, определенный на linux (SL4)

По некоторым причинам, 1,6 виртуальной машины Java начинается с невероятно большой куче, и не может начать:

java -version 
Error occurred during initialization of VM 
Could not reserve enough space for object heap 
Could not create the Java virtual machine. 

Если я запустить его с, например, -Xmx1800M, тогда он работает нормально. Итак, мне интересно, где установлен размер кучи по умолчанию, и что еще более важно, как его изменить?

Аппарат имеет 8 ГБ физической памяти, и я считаю, что сервер Sun JVM должен начинать с по умолчанию половины памяти до 512 М, но это явно не так, поскольку он пытается выделить более 1800 МБ.

EDIT: Я понимаю, что можно использовать _JAVA_OPTIONS, но это кажется немного неуклюжим; Я ожидал файл свойств где-то, но до сих пор я не смог его найти.

+0

32 или 64 бит VM? VPS? 64-битная ОС? Помогает ли это? http://forum.openvz.org/index.php?t=msg&goto=7057 – cletus

+0

> uname -a Linux eddie004 2.6.18-128.7.1.el5 # 1 SMP Mon Aug 24 08:12:52 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux я получаю такое же поведение с или без -d64 (и -Server): > Java произошла -d64 -версия Ошибка при инициализации VM не удалось зарезервировать достаточно места для объекта кучи не удалось создать виртуальная машина Java. Ссылка была хорошая; Я думаю, это должно быть потому, что у машины есть 8G физическая память, но каждому пользователю разрешено только 2G, и это как-то путает JVM в поведении по-разному с спецификацией. –

+0

Извините, этот комментарий был плохо отформатирован. Это 64-разрядный os, использование -d64 не имеет никакого значения, не делает -server. Возможно, это связано с машиной с 8G, но ограничение пользователей на 2G –

ответ

1

Для этого файла не найдено. По Garbage Collector Ergonomics:

начальный размер кучи:

Larger 1/64-ой из физической памяти машины на машину или какой- разумный минимум. До J2SE 5.0, начальный размер кучи по умолчанию был разумным минимумом, который варьируется на платформе . Вы можете переопределить этот по умолчанию, используя опцию командной строки -Xms .

максимальный размер кучи:

Меньшие 1/4 физической памяти или 1 Гб. До J2SE 5.0 максимальный размер кучи по умолчанию для составлял 64 МБ. Вы можете переопределить это значение по умолчанию, используя параметр командной строки -Xmx.


Примечание: границы и фракции, приведенные для размера кучи являются правильными для J2SE 5.0. Вероятно, они будут в последующих выпусках, так как компьютеры становятся более мощными.

Учитывая у вас есть 8 Гб оперативной памяти, по умолчанию максимальный размер кучи должен быть 1 ГБ при условии, что вы используете Java 6.

+0

Хорошо, отлично. Но, похоже, это не так, и я даже не могу узнать, что такое по умолчанию, поскольку оно не будет начинаться со значения по умолчанию. Любая идея, почему она не установлена ​​в 1 ГБ, и что можно сделать? Справедливо ли говорить, что это ошибка в JVM, которую мы имеем? –

1

Там же не подавать никаких стандартных свойств. JVM (Sun) имеет значения по умолчанию, жестко закодированные в нем.

+0

Hi Brian: Означает ли это, что вы можете изменить размер кучи только во время выполнения? Если быть более точным, если я изменил значение по умолчанию и перезапустил JVM, изменился бы размер кучи на «значения по умолчанию жестко закодированные»? –