VMware guest虚拟机中的JVM堆大小调整

时间:2009-01-13 16:52:00

标签: java memory vmware

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

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

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

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

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

2 个答案:

答案 0 :(得分:5)

与我的问题相关:

这是一个PDF,它提供了有关在VMware客户机上运行Java的注意事项的广泛概述:link text

答案 1 :(得分:2)

所以在这种情况下,请确保Reservation = OS vRAM + JVM +堆大小 希望这有帮助。

但与此同时,以下是VMware KB网站的一般性建议:

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

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

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

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

为了更轻松地监控和负载平衡,请为每个虚拟机使用一个JVM进程。

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