服务器(Jboss,Tomcat等)可以使用多少内存?例如,如果服务器有128GB的内存,它可以使用至少100GB的内存吗?我正在为我的本地使用这些参数:
-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512
这些参数是否可以配置为使用100gb?
答案 0 :(得分:8)
我们使用它来运行24GB 64位JVM,并且每秒提供超过100页的请求,同时进行亚秒级GC暂停:
-Xms24g -Xmx24g -XX:MaxPermSize=256m -XX:NewRatio=4 -XX:SurvivorRatio=8
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+DisableExplicitGC
-XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled
-XX:+CMSScavengeBeforeRemark -XX:CMSInitiatingOccupancyFraction=68
如果服务器有内存,则不应该有任何原因指定100GB。由于我们使用的是32GB以下,我们还使用-XX:+UseCompressedOops
来减少64位寻址的开销。此外,我们使用-XX:+UseLargePages
来获得更好的性能,但您必须首先为您的操作系统启用大页面支持。
答案 1 :(得分:4)
正如Mat所说,那些巨大的堆可能会出现垃圾收集问题,但是随着堆积很大,你可能正在使用一个多核机器,你可以使用一个基本上运行在它自己的核心上的收集器。
否则-Xm接受'g'单位,以便您可以写-Xmx100g
java的Manpage(在OS X上)说:
在Mac OS X平台上,上层 运行时限制此值 32位模式(-d32)约为 2100米减去间接费用金额,和 大约127吨减去开销 在64位模式下运行时的数量 (-d64)。在Solaris 7和Solaris 8 SPARC上 平台,这个的上限 价值约为4000米 减去间接费用。在Solaris 2.6上 和x86平台,上限是 大约2000米减去 间接费用。在Linux平台上,上层 限制约为2000米减去 间接费用。
答案 2 :(得分:3)
对于那种堆大小,你会遇到(可能)戏剧性的GC暂停。 (除此之外,只要您运行64位虚拟机,我不知道有什么限制)
与您的问题没有直接关系,但我发现这个Google TechTalks video on Ehcache很有趣--Greg Luck在那里讨论堆大小问题。