我有一台服务器的内存问题。这是一个亚马逊的微型实例,所以它的内存非常有限(free -m表示为603 MB)。这就是为什么我开始使用tomcatJVM开销太大
-server -Xmx290m -Xms290m -XX:MaxPermSize=65m
但是,“java”进程大约占内存总量的86%,即518M。 518-355 = 163 MB的开销。这看起来好像很多,而且是可疑的,尤其是考虑到比:
- 类似的应用程序运行在另一个微实例其他JVM版本没有开销这么大
- 相同的应用程序在本地运行只给出40 MB开销。它在本地运行在Windows 7,64位。
有问题的服务器上的Java版本是:
java version "1.7.0_09-icedtea"
OpenJDK Runtime Environment (amzn-2.3.3.13.amzn1-x86_64)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)
本地运行时和服务器上的一个之间的巨大差异使我排除的选项,还有一些昂贵的离堆对象(例如字节缓冲区)(并且我没有使用任何这些)。我知道JVM开销会有所不同,但是有超过1/2的堆作为开销听起来太大了。那可能是什么原因呢?或者这是一种正常的事情吗?
当你在本地运行时,你还添加了-server吗?你在本地有什么JVM? – Sorin
Oracle JDK,7,64位(我现在不在家中,因此我暂时无法提供更多细节)。我不确定关于服务器切换,这是一个很好的观点。我会尝试的。 – Bozho
它没有任何开关如何反应?即默认? – epoch