2009-01-13 113 views
6

此问题可能是更好的表述:在VMware ESX等管理程序上运行Java服务器如何影响Java堆?VMware客户机中的JVM堆大小

  • 访问JVM堆是从OS /管理程序透视随机
  • 这是很难为客户OS或管理程序来优化存储器是随机访问
  • 鉴于此,可以在管理程序检测在未使用的页JVM堆?

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

VMware是否足够聪明地检测到堆中的一些实际上未被使用?这如何影响GC性能?在VMware中让堆动态调整大小会更好吗?什么GC策略与VMware客户最好地协作?另外,如果任何人都可以指出我在虚拟化环境中调整JVM堆的指导原则,我会非常感激。

回答

5

相关的我的问题:

这里是提供考虑全面的介绍在VMware来宾运行的Java PDF文件:link text

2

所以在这种情况下,确保预留= OS的虚拟RAM + JVM +堆大小 希望这有助于。

但与此同时,来自VMware KB网站下面是一般建议:

大小的虚拟机内存留出足够的空间用于Java堆的Java虚拟机代码和其他内存需求叠加,任何其他并发执行的进程需要来自客户操作系统的内存。

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

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

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

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

如果您的ESX Server过载,请确保虚拟机中运行气球驱动程序,以便优化管理内存。