为什么';我的Java应用程序不能在Red Hat Linux中处理巨大的页面吗?
我尝试过这个简单的命令:为什么';我的Java应用程序不能在Red Hat Linux中处理巨大的页面吗?,java,linux,memory,jvm,huge-pages,Java,Linux,Memory,Jvm,Huge Pages,我尝试过这个简单的命令: java -XX:+UseLargePages -Xms2g -version 我收到错误消息: Java HotSpot(TM) 64-Bit Server VM warning: Failed to reserve shared memory (errno = 12). 但是如果没有大的页面,它可以正常工作 meminfo输出: HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd:
java -XX:+UseLargePages -Xms2g -version
我收到错误消息:
Java HotSpot(TM) 64-Bit Server VM warning: Failed to reserve
shared memory (errno = 12).
但是如果没有大的页面,它可以正常工作
meminfo输出:
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB
它不起作用,因为您的巨大页面只有2MB(2048KB),堆大小至少为2GB。在Linux上运行巨大页面需要两件事(请参阅) 1) shmmax可用的最大共享内存量需要大于JVM堆大小。 2) 需要启用巨大的页面,并提供足够的可用性来支持JVM堆 shmmax的运行时设置为/proc/sys/kernel/shmmax hugepages数的运行时设置为/proc/sys/vm/nr_hugepages 如果希望这些设置在重新启动后保持不变,则需要通过sysctl进行设置 因此,如果指定4GB最大堆,shmmax需要>=4GB,对于2MB页面,nr_hugepages需要>=2K
您的命令行还应指定最大堆大小。您尝试了2KB的最大堆还是最小堆?最重要的是最大堆。默认最大堆取决于许多因素,但肯定会大于2KB。meminfo中的2MB输出大小为1页(而不是默认的4k)。所以你的答案是不正确的。正如你所看到的,“HugePages_Total”有0页。因此,您的操作系统无法在配置时使用大型页面。您需要将vm.nr_hugepages sysctl参数更改为要分配的页面数。在适当的/etc配置文件中设置它,然后重新启动,以确保内核能够为巨大的页面分配足够的内存。在此之后,如果HugePages_Total仍然为0,那么您可能没有足够的RAM来容纳为大型页面保留的页面数量。另请参阅您的操作系统文档,以设置巨大页面(甚至可以在启动过程的早期作为grub参数进行设置)@user710818您是否验证过,一旦完成了设置,在启动java程序之前,meminfo是否报告了“HugePages_Total”的页面总数足以满足您的需要?