2012-07-22 44 views
2

基本上我一个CentOS 6.2 16GB系统Java进程使用的RAM比分配的更多?

我通过rtoolkit开机启动我的服务器上运行的Minecraft服务器,现在我赋予它的12GB但是它使用比睦更多,我不知道为什么要使用。 我运行这个命令来运行jar文件:

java -Xmx30M -Xms30M -XX:MaxPermSize=40M -jar Minecraft_RKit.jar USER:PASS 

这则运行带有命令的进程:

java -Xms12288M -Xmx12288M -Djline.terminal=jline.UnsupportedTerminal -jar /home/craftbukkit.jar nogui 

现在,如果我看我Webmin的模块,我可以看到它使用完全相同18025792 kB的RAM。比我分配的方式更多。这随后导致进程使用大量内存,导致系统崩溃。

我可能在这里犯了一个愚蠢的错误,但我真的很感激,如果任何人都可以阐明这种情况。

非常感谢。

回答

3

很少有其他存储器消费者在JVM:

  • 在64位操作系统each thread needs at least a MiB of memory。 5000个螺纹(不可能的,但如果这是一个服务器)可以将填补分配堆12吉布和使用存储器的17吉布之间的间隙

  • 本机代码有它自己的堆

  • PermGen的设置AREN在您的第二个命令行中没有提到

0

您正在设置最大堆大小,这通常是最大但不是全部内存使用量。

你有线程本地堆栈(这可以添加到GB是你有很多),共享库代码和C库使用的任何内存。

BTW 16 GB是17,179,000,000字节。

0

另一种可能的解释是(除了线程堆栈,permgen和本地堆),Minecraft服务器可能使用大型内存映射文件或类似的东西。