2014-03-02 17 views
1

我的prod中的webApp(linus,tomcat 7.0.22)需要390 MB的内存,在本地环境中同样需要大约106 MB。我继续使用eclipse MAT来调查堆问题,但不明白为什么同一个应用程序会在产品中消耗如此巨大差异的内存?任何线索都会有所帮助。为什么JVM在生产中比本地主机多三倍内存?

+1

您确定确定您正在查看活动的RAM使用情况,而不是过程的缓存使用情况? Linux与RAM的工作方式不同于Windows。 – indivisible

+1

在开发和生产服务器(操作系统,Java运行时,servlet容器,...)之间是否具有相同的配置?你也可能想配置你的jvm在崩溃时转储堆,以便为你提供适当的调查材料。 – ylabidi

+0

一些更多的细节 - prod是Linux与tomcat 7.0.22。本地是在eclipse下运行tomcat的windows。现在我正在使用MAT查看堆转储,它显示了由对象使用的49 MB。仍然想知道如果Java对象只有49 MB,然后谁在休息? – Amit

回答

1

这种差异是微不足道的,对于正在运行的应用程序,几百兆字节仍然相当小。这里似乎没有问题。

2
  1. 粗略地说,Java应用程序总是使用大约与使用-Xmx分配给它的内存一样多的内存。在生产过程中,堆扩展到了这个限制,直到垃圾回收器开始执行。但是,这是JVM扩展或缩小堆空间时的规则的一种简化,它更复杂一些。

  2. JIT将在生产中产生更多和更大的机器码。

因此,如果您只是在本地启动应用程序,并通过点击几次进行预热,就不会再有对象垃圾,从而使堆扩展。因为没有人经常使用它,所以没有必要对这些方法进行处理。

相关问题