我试图调整某种高负载应用程序,即将数据从一个云端流式传输到另一个预处理端口。 我的应用程序的具体内容是广泛的内存使用和低CPU消耗。 我用jconsole监控了应用程序,并且发现了一些有趣的图片--CPU加载了15%,我仍然捕捉到了内存不足的错误。内存不足,CPU消耗低
从jconsole手动触发“执行GC”会清除所有代中的大量内存,所以我假设应用程序中没有内存泄漏。我试图在单个虚拟CPU之间切换到具有各种GC的多CPU(-XX:+ UseG1GC; -XX:+ UseParallelGC,无需其他调整),并且图片实际上是相同;
- 那么,为什么GC不使用CPU来释放内存?
- 我们可以调整GC以进行更频繁/正确的工作吗?
是什么“内存不足”是指在这种情况下?你会得到OuOfMemoryException?这似乎不大可能,因为您说手动调用GC时内存已被释放。如果你没有得到例外,你的问题是什么? – Axel
也许你正在分配一些如此之大的东西,甚至GC也不会清除足够的内存,在这种情况下,我认为系统甚至可以毫无困难地执行GC操作。 – john16384
获取堆转储,看看有什么在内存中 – Vipin