1

我正在使用 maven、jetty、scala、scalate 和 scalate-ssp 运行一个简单的“hello world”Web 服务器项目。

使用“mvn jetty:run”运行项目,需要 120Mb 的 RSS 内存(ps -o rss,etime,pid,command)。

但是,在另一台计算机上运行完全相同的项目需要 480Mb 的 RSS 内存。

第一台电脑,mac:uname -a

Darwin mac.local 11.4.0 Darwin Kernel Version 11.4.0: Mon Apr  9 19:32:15 PDT 2012; root:xnu-1699.26.8~1/RELEASE_X86_64 x86_64

第二台计算机,Linux:uname -a

Linux linux.local 2.6.32-220.2.1.el6.x86_64 #1 SMP Fri Dec 23 02:21:33 CST 2011 x86_64 x86_64 x86_64 GNU/Linux

什么可以解释这种差异?

我有一个内存有限的环境。如何减少第二台计算机的 RSS 内存?


从 joakime 的回答更新:

苹果电脑:

Java HotSpot(TM)
Java version: 1.6.0_33, vendor: Apple Inc.
Apache Maven 3.0.3 (r1075438; 2011-02-28 18:31:09+0100)

Linux:

OpenJDK
Java version: 1.6.0_24, vendor: Sun Microsystems Inc.
Apache Maven 3.0.4 (r1232337; 2012-01-17 09:44:56+0100)

Mac 的 Runtime.getRuntime().maxMemory() 为 120Mb,Linux 为 3500Mb。

现在我运行:

export MAVEN_OPTS="-Xmx256m -Xms10m"; mvn jetty:run

有了这个,在 linux Runtime.getRuntime().maxMemory() 现在提供 227Mb(而不是 3500Mb)。

但是,执行“ps -o rss,etime,pid,command”仍然会提供 430Mb 的 RSS 内存。我需要 RSS 内存小于 250Mb。

如何做到这一点?

4

1 回答 1

2

如果没有更多信息,我推测您有不同的 JVM 实现(1 个 linux,1 个 OSX),并且可能没有指定这些 JVM 的内存上限。

请注意,不同的 JVM 可能会指定不同的内存上限默认值。即使是相同的 JVM 版本,oracle 也会在不同的操作系统/硬件组合上以不同的方式指定不同的最大内存限制。

关于这个主题的一个先前的问题可能会有所帮助:Java SE 6 中 Sun 的 JVM 的默认最大堆大小是多少?

此外,maven 版本在默认情况下使用的插件版本也不同,您可能会有完全在 maven + 其插件范围内的差异。

于 2012-08-15T22:00:51.227 回答