我对特定的应用程序或环境不感兴趣。虽然现在我的应用程序部署面临这个问题,但我对更通用的解决方案感兴趣。
是否有一些关于在Java服务器上设置堆大小的规则? (特别是现在,我正在使用 Tomcat 7 )。使用-Xms
和-Xmx
,您可以指定堆大小的最小值和最小值。基于部署在服务器上的应用程序,如何知道要设置的最大和最小堆大小。是否有一种通用的方法可以找到它,或者它是否更经验,与已部署的应用程序相关? - 与部署的应用程序相关的'我的意思是您必须知道您的应用程序正在做什么,数据库工作,用户界面工作,或任何其他内存消费者事物。
答案 0 :(得分:3)
我在几家公司做过java web app,对于所有这些公司来说,它完全是经验性的。 它主要取决于机器,而不是应用程序。例如,如果您的计算机只有4GB且只有tomcat服务器,则允许它占用3GB。如果服务器内存不足,你会尝试修复它或者购买更多内存......我认为它比付钱给某人计算所需内存要便宜......
我认为大公司也是如此,毫无疑问......
答案 1 :(得分:2)
这是经验性的 - 观察您的应用程序并了解它的行为。
还有更多内容 - 首先,请阅读memory pools and how to size them。如果你进入它,请看http://www.javaperformancetuning.com/ - 有很多关于调整内存问题的材料,等等。
现在,在通常的情况下,你不应该打扰-Xms
。将-Xmx
设置为您的应用程序所需的任何值(观察,找出)。 JVM在需要时增加内存池的大小,并相应地减少它们。只要确保,你就不会得到OutOfMemoryError
。然后,查看应用程序中的内存瓶颈(例如,完整的GC或长 stop-the-world 阶段),并根据需要调整池的大小和/或配置GC。