Не удается создать JVM с включенными-XX:+UseLargePages
у меня есть служба Java, которая в настоящее время работает с кучей 14GB. Я очень хочу попробовать - XX: + UseLargePages чтобы увидеть, как это может повлиять на производительность системы. Я настроил ОС, как описано ПО Oracle используя соответствующую общую память и значения страниц (они также могут быть рассчитаны с помощью онлайн-инструмент).
как только ОС настроена, я вижу, что она выделяет ожидаемый объем памяти как огромные страницы. Однако запуск виртуальной машины с помощью -XX:+UseLargePages
набор опций всегда приводит к одной из следующих ошибок:
, когда -Xms
/ -Xmx
почти равно огромному распределению страниц:
Failed to reserve shared memory (errno = 28). // 'No space left on device'
, когда -Xms
/ -Xmx
меньше, чем огромное распределение страницы:
Failed to reserve shared memory (errno = 12). // 'Out of memory'
я попытался ввести некоторую свободу действий-поэтому в системе 32GB я выделил 24GB общей памяти и hugepages для использования с JVM, настроенным с кучей 20GB, из которых только 14GB в настоящее время используется. Я также проверил, что пользователь, выполняющий JVM, имел права группы в соответствии с /proc/sys/vm/hugetlb_shm_group
.
может ли кто - нибудь дать мне несколько советов о том, где я могу ошибаться и что я могу попробовать дальше?
выделение/использование:
-
-Xms
/-Xmx
- 20GB - используется куча-14GB
-
/proc/sys/kernel/shmmax
- 25769803776 (24GB) -
/proc/sys/vm/nr_hugepages
- 12288
среда:
- системная память-32GB
- размер страницы системы - 2048KB
- в Debian 2.6.26-2-amd64 в
- Sun JVM 1.6.0_20-b02
решение
спасибо @jfgagne для предоставления ответа, который приведет к решению. В дополнение к
/proc/sys/kernel/shmall
настройка (указана как страницы 4KB), мне пришлось добавить записи в /etc/security/limits.conf
как описано на Томаса блог. Однако, поскольку мое приложение запускается с помощью jsvc
мне также пришлось дублировать настройки для пользователя root (обратите внимание, что ограничения указаны в КБ):
root soft memlock 25165824
root hard memlock 25165824
pellegrino soft memlock 25165824
pellegrino hard memlock 25165824
также стоит упомянуть, что настройки могут быть быстро протестированы, запустив JVM с помощью :
java -XX:+UseLargePages -Xmx20g -version
1 ответов
когда вы используете огромные страницы с Java, есть не только куча, использующая огромные страницы, но и PermGen: не забудьте выделить для нее место. Кажется, именно поэтому у вас есть другое сообщение Ошибка при установке Xmx
количество страниц.
есть еще shmall
параметр ядра, который необходимо установить, о котором вы не упоминали, возможно, это то, что блокирует вас. В вашем случае, вы должны установить его на 6291456.
последнее, что нужно сказать: при использовании огромных страниц,Xms
параметр больше не используется: Java резервирует все Xmx
в общей памяти с помощью огромных страниц.