6

这个问题的表述可能更好:在 VMware ESX 等管理程序上运行 Java 服务器如何影响 Java 堆?

  • 从操作系统/管理程序的角度来看,对 JVM 堆的访问是随机的
  • 客户操作系统或管理程序很难优化随机访问的内存
  • 鉴于此,管理程序能否检测 JVM 堆中未使用的页面?

Java 服务器应用程序的传统观点是,如果您在 JVM 启动时分配所有堆,而不是让堆在需要时动态调整大小,则性能最佳。换句话说,如果您将堆大小设置为 1GB,您的 Java 进程将获取 1GB 的连续虚拟地址空间(+ 二进制文件所需的任何空间),其他应用程序不再可用的内存。

VMware 是否足够聪明,可以检测到其中一些堆实际上是未使用的?这对 GC 性能有何影响?让堆在VMware中动态调整大小会更好吗?哪些 GC 策略最适合 VMware 来宾?

另外,有人会指出我在虚拟化环境中调整 JVM 堆的指南吗?

4

2 回答 2

5

与我的问题相关:

这是一个 PDF,它提供了在 VMware 客户机上运行 Java 的注意事项的广泛概述:链接文本

于 2009-01-14T19:35:24.830 回答
2

在这种情况下,请确保 Reservation = OS vRAM + JVM + heap size。

同时,以下是 VMware KB 站点的一般建议:

调整虚拟机内存的大小,为 Java 堆、Java 虚拟机代码和堆栈的其他内存需求以及任何其他需要来自客户操作系统的内存的并发执行进程留出足够的空间。

将 VMware Infrastructure Client 中的内存预留值设置为虚拟机的内存大小。因为任何类型的内存交换(物理或虚拟)都会损害 JVM 堆的性能,尤其是垃圾收集。

通过在不同时间以相同负载测试配置有不同数量虚拟 CPU 的虚拟机,确定托管 Java 应用程序的虚拟机的最佳虚拟 CPU 数量。

如果您在 JVM 中使用多个垃圾收集器线程,请将这些线程的数量与虚拟机中配置的虚拟 CPU 的数量相匹配。

为了更容易监控和负载平衡,每个虚拟机使用一个 JVM 进程。

如果您的 ESX Server 过度使用,请确保 Balloon Driver 在虚拟机中运行,以便对内存进行最佳管理。

于 2010-11-23T04:19:46.540 回答