耗尽系统内存后,Java进程被杀死。为什么?

时间:2014-01-11 13:05:10

标签: java libgdx out-of-memory kryo kryonet

我正在使用Oracle Java在Ubuntu 12.04.3 x64 VPS上运行Java应用程序。几分钟后,该过程被操作系统杀死:控制台中出现“已杀死”。

在崩溃之前,使用TOP(几千兆字节的虚拟内存)可以看到过多的内存使用情况。为了检查泄漏,我安装了Java VisualVM并通过jstatd远程连接到它。没有任何泄漏迹象可见:

  • 堆大小: 10 MB
  • PermGen空间大小: 20 MB
  • 主题:5
  • 已加载课程:815

尝试几次后,hs_err_pid7071.loghs_err_pid7057.log出现在apps目录中(已关联)。

应用程序使用了一些本机库。

我跑了 jcmd 8749 VM.native_memory detail获得this result。 VM当时正在使用大约2 GB的内存。

删除此行会导致泄漏消失:

Kryo kryo = new Kryo();
return kryo.copy(gameWorld);

Documentation of this method

1 个答案:

答案 0 :(得分:0)

我在你的hs *文件中看到这一行:

  

内存:4k页面,物理502752k(372080k免费),交换0k(0k免费)

是不是你的机器只有大约370M的可用内存?你尝试用“jvm_args:-Xms1g”启动JVM进程?从1G到哪里可以来?

相关问题