0

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

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

  • 堆大小:10 MB
  • 永久代空间大小:20 MB
  • 主题:5
  • 加载的课程:815

几次尝试后,hs_err_pid7071.loghs_err_pid7057.log出现在应用程序目录中(链接)。

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

我跑 jcmd 8749 VM.native_memory detail了,得到了这个结果。VM 当时使用了大约 2 GB 的内存。

删除此行会使泄漏消失:

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

此方法的文档

4

1 回答 1

0

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

内存:4k page,物理 502752k(372080k free),swap 0k(0k free)

是真的,您的机器只有大约 370M 的可用内存吗?你尝试用 "jvm_args: -Xms1g" 启动 JVM 进程?这个1G从哪里来?

于 2014-01-13T09:52:04.780 回答