应用服务器的最大内存限制

6

服务器(Jboss、Tomcat等)可以使用多少内存?例如,如果服务器有128GB的内存,它可以使用至少100GB吗?我在本地使用以下参数:

-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512

这些参数能够配置以使用100GB吗?

希望我的回答有所帮助。虽然这并不特定于JBoss,也许您可以编辑问题以指定Java? - WhiteFang34
你的回答与Java有关,但我的问题并不是关于Java的。我听说Tomcat的最大内存限制不能像JBoss那样增加。这就是为什么我问这个问题的原因。也许你听说过Tomcat的最大内存限制问题? - MartK
从可以使用更多内存的角度来看,JBoss和Tomcat之间没有区别。两者都受Java配置的内存限制。 - WhiteFang34
好的,那我会编辑问题以指定Java。这样人们可以更受益。感谢您的评论。 - MartK
3个回答

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以获得更好的性能,但是您需要先为您的操作系统启用大页支持。


4
正如Mat所说,那些巨大的堆可能会在垃圾回收方面出现问题,但是如果您使用的是多核机器,您可以使用一个基本上在自己的核心上运行的收集器。
否则,-Xm接受'g'单位,因此您可以编写-Xmx100g。
Java的Manpage(在OS X上)表示:
在Mac OS X平台上,以32位模式(-d32)运行时,该值的上限约为2100m减去开销金额,在64位模式(-d64)下运行时,该值的上限约为127t减去开销金额。在Solaris 7和Solaris 8 SPARC平台上,该值的上限约为4000m减去开销金额。在Solaris 2.6和x86平台上,上限约为2000m减去开销金额。在Linux平台上,上限约为2000m减去开销金额。

3

如果使用那种堆大小,你可能会遇到(很大程度上)引起注意的GC暂停。当然,只要你使用64位虚拟机,我不知道有硬性限制。

虽然与你的问题没有直接关系,但我发现这个Ehcache的Google TechTalks视频很有趣——Greg Luck在其中谈到了堆大小问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接