Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';我的Java应用程序不能在Red Hat Linux中处理巨大的页面吗?_Java_Linux_Memory_Jvm_Huge Pages - Fatal编程技术网

为什么';我的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”的页面总数足以满足您的需要?