1

我刚刚找到一个JVM配置,其中配置的大页面的大小远远大于为JVM分配的堆大小。

我在下面添加的配置是针对 Websphere Application Server 的,但是对于任何其他使用大页面的 Java 应用程序来说,问题都是一样的。通常,使用 -Xlp( IBM Knowledge Center-Tuning Linux 系统)开关为 IBM JRE 启用大页面,使用 -XX:+UseLargePages(Oracle:Java Support for Large Memory Pages)为 Oracle 启用大页面

当前配置显示

vm.nr_hugepages = 4096 
Hugepagesize: 2048 kB (from meminfo)
-Xmx 6144 (for java process)

JVM 从启用 -Xlp 开始。

我会假设 vm.nr_hugepages 8GB 被固定,因此其他进程无法使用。但是 Java 只会为 Heap 申请 6GB。

谁能解释一下其他2GB会发生什么?

提前致谢!

4

1 回答 1

2

剩余的 2GB 大页面被固定在连续的实内存中,等待应用程序使用它们(JVM 配置本身不会使堆增长到足以使用剩余的大页面)。除了潜在的调用者之外,该内存对于其他任何东西都无法使用。

大页面内核选项

大页面

定义启动时在内核中配置的持久大页面的数量。默认值为 0。只有在系统中有足够的物理上连续的空闲页面时,才可能分配(或取消分配)大页面。此参数保留的页面不能用于其他目的。

在后来的 Linux 版本中有一个“透明大页面”选项,它试图通过将不知情的应用程序移动到可能存在的任何空闲空间来解决其中的一些问题,但它似乎并没有得到太多的喜爱。

于 2016-12-21T13:04:31.347 回答