Як встановити мінімальний та максимальний розмір купи Java за допомогою змінних середовища?


78

Як встановити мінімальний та максимальний розмір купи Java за допомогою змінних середовища?

Я знаю, що розміри купи можна встановити під час запуску Java, але я хотів би, щоб це було скориговано за допомогою змінних середовища на моєму сервері.


Прийнята відповідь застаріла і більше не застосовується. Зверніться до відповіді @ Gouthier, якщо ви опинитесь тут
непрофесіонал

Відповіді:


80

Ви не можете зробити це, використовуючи змінні середовища безпосередньо. Вам потрібно використовувати набір "нестандартних" опцій, які передаються команді java. Запустити: java -X для деталей. Варіанти, які ви шукаєте, це -Xmx та -Xms (це "початковий" розмір купи, тому, мабуть, те, що ви шукаєте.)

Деякі продукти, такі як Ant або Tomcat, можуть поставлятися із пакетним сценарієм, який шукає змінну середовища JAVA_OPTS, але це не є частиною середовища виконання Java. Якщо ви використовуєте один із цих продуктів, ви можете встановити змінну, наприклад:

set JAVA_OPTS="-Xms128m -Xmx256m"  

Ви також можете застосувати такий підхід за допомогою власного командного рядка, наприклад:

set JAVA_OPTS="-Xms128m -Xmx256m"  
java ${JAVA_OPTS} MyClass

1
Ця JAVA_OPTSтехніка також використовується сценаріями, згенерованими плагіном maven appassemble.
Мутант Боб

2
оскільки @neves, згаданий у коментарі нижче, змінився у java 7 ( docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/… ). ви можете використовувати JAVA_TOOL_OPTIONS (див. посилання та відповіді нижче)
keisar

67

Якщо ви хочете, щоб будь-який javaпроцес, не лише ant або Tomcat, вибрав такі варіанти, як -Xmxвикористання змінної середовища _JAVA_OPTIONS.

У bash: export _JAVA_OPTIONS="-Xmx1g"


1
Прекрасно, це чудово працює, і це врятувало мене від вигляду.
rodnaph

1
У Windows: set _JAVA_OPTIONS=-Xmx1g Щоб зробити його постійним, створіть нову змінну середовища _JAVA_OPTIONS та встановіть його на-Xmx1g
tim_hutton 02


16

Насправді існує спосіб встановити загальні значення за замовчуванням для JVM Sun за допомогою змінних середовища.

Див. Розділ Як встановити властивість системи Java, щоб вона була ефективною при кожному запуску JVM, не додаючи його до аргументів командного рядка .


10

Ви не можете зробити це за допомогою змінних середовища. Це робиться за допомогою "нестандартних" опцій. Виконати: java -Xдля деталей. На що ви шукаєте варіанти -Xmxі -Xms(це «початковий» розмір купи, так що, ймовірно , що ви шукаєте.)


1
Виглядає це змінилося в Java 7: docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html / ...
NEVES

10

Можна використовувати JAVA_TOOL_OPTIONS.

Приклад:

export JAVA_TOOL_OPTIONS=-Xmx512m

Про це зазначалося в деяких коментарях та в іншій відповіді .

Питання OP досить давнє, але оскільки це перший результат Google для запитання, я думав, що для чіткості додам відповідь тут.


4

Я думаю, що ваш єдиний варіант - це обернути java сценарієм, який замінює змінні середовища в командний рядок


3

Пара приміток:

  1. Мураха Apache нічого не знає про JAVA_OPTS, тоді як сценарії запуску Tomcat це знають. Для мураха Apache використовуйте ANT_OPTS, щоб впливати на середовище для JVM, що працює / ant /, але не на речі, які мураха може запустити.

  2. Максимальний розмір купи, який ви можете встановити, повністю залежить від навколишнього середовища: для більшості 32-розрядних систем максимальний обсяг простору купи, який ви можете запитати, незалежно від доступної пам'яті, знаходиться в діапазоні 2 ГБ. Найбільша купа в 64-розрядної системі "справді велика". Крім того, ви практично обмежені фізичною пам'яттю, оскільки куча управляється JVM, і ви не хочете, щоб багато обмінів відбувалося на диск.

  3. У серверних середовищах зазвичай потрібно встановити однакові значення -Xms та -Xmx: це зафіксує розмір купи у певному розмірі, і збирач сміття має менше роботи, оскільки купу ніколи не доведеться повторно розміром.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.