我目前有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