不要打一匹死马:跑五个”;“你好,世界”;java应用程序使用700MB的RAM

不要打一匹死马:跑五个”;“你好,世界”;java应用程序使用700MB的RAM,java,memory,Java,Memory,我一直在努力解决这台服务器上的内存使用问题,但我想我终于找到了一个最简单的例子: public class Hello { public static void main(String[] args) throws Throwable { System.out.println("HI"); Thread.sleep(3600 * 1000); return; } } 运行此应用程序的五个副本总共使用700M

我一直在努力解决这台服务器上的内存使用问题,但我想我终于找到了一个最简单的例子:

public class Hello {
    public static void main(String[] args) throws Throwable {
            System.out.println("HI");
            Thread.sleep(3600 * 1000);
            return;
    }
}
运行此应用程序的五个副本总共使用700MB的RAM。这是在我将命令行修改为:

java -client -Xmx6m -Xbatch -XX:MaxPermSize=2m Hello
(我试过使用
-server
,但没有效果。
-Xbatch
是用于咯咯笑的,它不会改变内存使用。)

我的理论是,JVM之间没有共享

来自VisualVM的数据:

820KM heap (after GC); 8.4MB PermGen; 1136 classes loaded.
JVM信息:

root@devel:~# java -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03, mixed mode)
Ubuntu 10.04 LTE服务器

这似乎很高,基本上阻止了我同时运行两个以上的java应用程序

你知道哪里出了问题吗


谢谢。

您确定正在运行Java 1.6虚拟机吗?因为类数据内存共享似乎从1.5开始就存在了

从评论中复制:


类数据共享仅支持32位JVM和客户端热点。这个“Java热点(TM)64位服务器VM”显示您正在运行64位JVM。因此,下载32位版本并尝试:java-d32-client-version您应该获得:java版本“1.6.0_22”java(TM)SE运行时环境(构建1.6.0_22-b04)java热点(TM)客户端虚拟机(构建17.1-b03,混合模式,共享)注意上面的“客户端虚拟机”和“共享”Tomas Hurka

您确定正在运行Java 1.6虚拟机吗?因为类数据内存共享似乎从1.5开始就存在了

从评论中复制:


类数据共享仅支持32位JVM和客户端热点。这个“Java热点(TM)64位服务器VM”显示您正在运行64位JVM。因此,下载32位版本并尝试:java-d32-client-version您应该获得:java版本“1.6.0_22”java(TM)SE运行时环境(构建1.6.0_22-b04)java热点(TM)客户端虚拟机(构建17.1-b03,混合模式,共享)注意上面的“客户端虚拟机”和“共享”托马斯·赫卡

啊,对。很抱歉编辑。问题是如何降低内存使用率,因为现在我不能在该服务器上运行两个以上的java应用程序。很抱歉编辑。问题是如何降低内存使用率,因为现在我不能在该服务器上运行两个以上的java应用程序。root@devel:/app/axir/target#java-版本java版本“1.6.0_22”java(TM)SE运行时环境(构建1.6.0_22-b04)java热点(TM)64位服务器虚拟机(构建17.1-b03,混合模式)root@devel:/app/axir/target#java-Xshare:on-version类数据共享与其他指定选项不一致。VM初始化期间出错,无法使用共享存档。Hmmm。。。那么我想你可能有更好的机会在superuser或serverfault中获得解决方案,因为问题可能出在主机操作系统上(可能是某些selinux策略阻止内存共享,除非显式启用?我不知道:-/),而且我链接的帖子似乎非常广泛,也许在itClass中有一些更有趣的东西值得一读。只有32位JVM和客户端热点才支持数据共享。这个“Java热点(TM)64位服务器VM”显示您正在运行64位JVM。因此,下载32位版本并尝试:java-d32-client-version您应该会得到:java版本“1.6.0_22”java(TM)SE运行时环境(构建1.6.0_22-b04)java热点(TM)客户端虚拟机(构建17.1-b03,混合模式,共享)注意上面的“客户端虚拟机”和“共享”。root@devel:/app/axir/target#java-java版本“1.6.0_22”java(TM)SE运行时环境(build 1.6.0_22-b04)Java HotSpot(TM)64位服务器虚拟机(build 17.1-b03,混合模式)root@devel:/app/axir/target#java-Xshare:on-version类数据共享与其他指定选项不一致。VM初始化期间出错,无法使用共享存档。Hmmm。。。那么我想你可能有更好的机会在superuser或serverfault中获得解决方案,因为问题可能出在主机操作系统上(可能是某些selinux策略阻止内存共享,除非显式启用?我不知道:-/),而且我链接的帖子似乎非常广泛,也许在itClass中有一些更有趣的东西值得一读。只有32位JVM和客户端热点才支持数据共享。这个“Java热点(TM)64位服务器VM”显示您正在运行64位JVM。因此,下载32位版本并尝试:java-d32-client-version您应该会得到:java版本“1.6.0_22”java(TM)SE运行时环境(构建1.6.0_22-b04)java热点(TM)客户端虚拟机(构建17.1-b03,混合模式,共享)注意上面的“客户端虚拟机”和“共享”。