-->

不能与-XX创建JVM:启用+ UseLargePages(Cannot create JVM wi

2019-07-30 03:51发布

我目前有14GB堆运行的Java服务。 我热衷于尝试了-XX:+ UseLargePages选项,看看这可能会影响系统的性能。 我已经如所描述的配置的OS 由Oracle使用适当的共享存储器和页的值(这些也可以与算出的在线工具 )。

一旦操作系统配置,我可以看到它分配的内存庞大的页面的预期数量。 然而,随着启动VM -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'

我曾尝试引入一些余地 - 等我分配的共享存储器和大页面的24GB与具有20GB堆,其中目前仅利用14GB构成的JVM使用32GB系统。 我也核实执行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
  • 孙JVM 1.6.0_20-B02

由于@jfgagne提供了促成解决方案的答复。 除了/proc/sys/kernel/shmall设置(指定为4KB页),我不得不添加条目/etc/security/limits.conf上描述托马斯的博客 。 然而,正如我的应用程序使用开始jsvc我也不得不复制为root用户的设置(注意限制以KB指定):

    root       soft memlock 25165824
    root       hard memlock 25165824
    pellegrino soft memlock 25165824
    pellegrino hard memlock 25165824

另外值得一提的由与启动JVM是设置可以快速测试-version参数:

    java -XX:+UseLargePages -Xmx20g -version

Answer 1:

当您使用大内存页与Java,不仅存在巨大的使用页堆,但也有PermGen的:不要忘记为它分配空间。 看来这就是为什么你有不同的错误号消息,当您设置Xmx大页面的数量接近。

也有shmall需要设置内核参数,你不提,也许它是什么阻止你。 在你的情况,你应该把它设置为6291456。

最后要说的:使用大内存页时,在Xms参数不再使用:Java的保留所有Xmx使用大内存页共享内存。



文章来源: Cannot create JVM with -XX:+UseLargePages enabled