这个问题可能更好:在VMware ESX等虚拟机管理程序上运行Java服务器会如何影响Java堆?
Java服务器应用程序的传统观点是,如果在JVM启动时分配所有堆,而不是在需要时动态调整堆的大小,那么性能最佳。换句话说,如果将堆大小设置为1GB,则Java进程将获取1GB的连续虚拟地址空间(+二进制文件所需的任何内容),其他应用程序不再可用的内存。
VMware足够聪明,可以检测到某些堆实际上未使用过吗?这对GC性能有何影响?让堆在VMware中动态调整大小会更好吗?哪些GC策略最适合VMware客户?
另外,有人会指出我在虚拟化环境中调整JVM堆的指导原则吗?
答案 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,以便对内存进行最佳管理。