我在Ubuntu 16.04服务器上运行java应用程序。经过广泛调查后,我发现JVM堆大小或多或少是不变的。无论如何,没有内存增加。
但是,当我使用htop
查看服务器时,服务器的内存消耗会以惊人的速度增长。我不确定究竟是什么造成了这种情况,但它的100%来自于java进程。
我查看了hprof
文件,但我真的不知道我在寻找什么。
我正在运行两个可能负责的库,但我并不熟悉它们;
我不确定这些/两者是否会导致JVM外部的内存增加。
有关帮助确定问题的最佳计划的任何建议都会很棒。
答案 0 :(得分:1)
感谢@ the8472,@ davmac @qwwdfsad和@ andrey-lomakin的评论。我很欣赏问题中提供的细节,但是我试图避免提供可能导致兔子整体无关的无关数据。
我系统地测试了每个建议,结果发现问题源于 OrientDB 。我不能说100%以下哪个解决了问题(可能两者)。根据@ andrey-lomakin建议,我从2.1.19
升级到2.2-rc1
。在执行此操作时,应用程序批量插入开始抛出异常,因此我将它们全部转换为单个线性查询。一旦竞争,内存泄漏就消失了。
作为旁注,如果它在测试direct IO leak时影响到其他任何人,我确实发现-Djdk.nio.maxCachedBufferSize=...
与Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
一起工作时我感到惊讶。