Подтвердить что ты не робот

Эффекты начального размера Java -Xms

В чем преимущество настройки параметра -Xms и, например, с начальной памятью, например, по умолчанию (64 МБ в моем случае, согласно настройке Java GC tunning: http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html#par_gc.ergonomics.default_size)?

Также есть ли смысл устанавливать как начальную, так и максимальную память на один размер?

Спасибо.

4b9b3361

Ответ 1

Преимущество заключается в том, что существует штраф за производительность, когда вы используете достаточное количество кучи, которое должно быть изменено. Если вы установите его первоначально на 64 МБ, но оказалось, что ваше приложение под нагрузкой требует 250 МБ, когда вы нажмете около 64 МБ, JVM будет выделять больше места для кучи и, возможно, перемещаться по некоторым объектам и выполнять другие бухгалтерские операции. Это, конечно, требует времени.

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

Иногда при использовании приложения Java вы увидите инструкции, такие как "set Xms и Xmx на одно и то же значение". Это делается для того, чтобы избежать изменения размера в целом, так что ваше приложение запускается с кучей, которое уже настолько велико, как когда-либо будет.

Ответ 2

Связанная статья объясняет это достаточно ясно:

Значения по умолчанию: -Xms 3670k -Xmx 64m  [...] большой серверные приложения часто испытывают две проблемы с этими значениями по умолчанию. Один медленный запуск, поскольку начальный куча мала и должна быть изменена многие крупные коллекции. Более проблема нажатия - это то, что значение по умолчанию максимальный размер кучи необоснованно для большинства серверных приложений. Правила для сервера приложения:

  • Если у вас нет проблем с паузы, попробуйте предоставить столько памяти насколько это возможно для виртуальной машины. Размер по умолчанию (64 МБ) часто слишком маленький.
  • Настройка -Xms и -Xmx для то же значение повышает предсказуемость путем удаления наиболее важных определение размера из виртуального машина. Однако виртуальный машина не может компенсировать если вы делаете плохой выбор.
  • В общем, увеличьте память, когда вы увеличить количество процессоров, поскольку распределение может быть распараллеливание.

Вас также может заинтересовать обсуждение проблемы.

Ответ 3

Если для вашего приложения обычно требуется более 64 МБ памяти кучи, установка Xms на большее значение должна улучшить производительность приложения несколько, потому что виртуальной машине не нужно будет запрашивать дополнительную память столько раз.

В производственной системе я считаю, что Xms и Xmx имеют одинаковое значение. В основном это говорит: "Это объем памяти кучи, который может получить VM, и я сразу его посвящаю".

Ответ 4

В чем преимущество настройки параметра -Xms и, например, с начальной памятью больше, то рассчитанная по умолчанию

Если начальная куча мала и должна быть изменена по многим основным коллекциям, запуск будет медленным.

Также есть ли смысл устанавливать как начальную, так и максимальную память на один размер?

Настройка -Xms и -Xmx на одно и то же значение дает вам предсказуемость. Это особенно важно при определении размера JVM во время настройки производительности. Но JVM не сможет компенсировать какое-либо плохое решение.

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