我正在使用Oracle Java在Ubuntu 12.04.3 x64 VPS上运行Java应用程序。几分钟后,该过程被操作系统杀死:控制台中出现“已杀死”。
在崩溃之前,使用TOP(几千兆字节的虚拟内存)可以看到过多的内存使用情况。为了检查泄漏,我安装了Java VisualVM并通过jstatd远程连接到它。没有任何泄漏迹象可见:
尝试几次后,hs_err_pid7071.log和hs_err_pid7057.log出现在apps目录中(已关联)。
应用程序使用了一些本机库。
我跑了jcmd 8749 VM.native_memory detail
获得this result。 VM当时正在使用大约2 GB的内存。
删除此行会导致泄漏消失:
Kryo kryo = new Kryo();
return kryo.copy(gameWorld);
答案 0 :(得分:0)
我在你的hs *文件中看到这一行:
内存:4k页面,物理502752k(372080k免费),交换0k(0k免费)
是不是你的机器只有大约370M的可用内存?你尝试用“jvm_args:-Xms1g”启动JVM进程?从1G到哪里可以来?