Не удается создать 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 в общей памяти с помощью огромных страниц.