Jetty 在其中一台计算机中使用了过多的 RSS 内存.如何减少它



我正在运行一个简单的"hello world"Web服务器项目,其中包含maven,jetty,scala,scalate和scalate-ssp。

使用"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)

Runtime.getRuntime().maxMemory() 对于 mac 是 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。

如何实现这一点?

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

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

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

此外,maven 版本在

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

最新更新