Java进程使用的RAM多于分配的?

时间:2012-07-22 11:11:11

标签: java linux memory centos minecraft

基本上我在Centos 6.2 16GB系统上运行一个Minecraft服务器

我通过rtoolkit启动以启动我的服务器,现在我分配它使用12GB但是它使用的muc超过那个而且我不知道为什么。 我运行此命令来运行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 个答案:

答案 0 :(得分:3)

JVM中很少有其他内存使用者:

  • 在64位操作系统each thread needs at least a MiB of memory上。 5千个线程(不太可能,但如果这是一个服务器)可以填补12 GiB分配堆和17 GiB已用内存之间的差距

  • 本机代码有自己的堆

  • 第二个命令行中未提及PermGen设置

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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