即使有巨大的内存可用,Java GC也会经常运行

即使有巨大的内存可用,Java GC也会经常运行,java,memory-leaks,garbage-collection,jprofiler,jvisualvm,Java,Memory Leaks,Garbage Collection,Jprofiler,Jvisualvm,我检查了Java应用程序的当前内存行为,我注意到垃圾收集器最初很少运行,但在很长一段时间内,它会继续更频繁地运行,即使我没有设置最大内存使用量限制(服务器有8Gb的可用ram) 最初GC每20分钟运行一次,15小时后每分钟运行一次,但应用程序执行相同的操作,RAM使用没有峰值 继续运行GC,它会消耗越来越多的CPU,24小时后,CPU使用率为85%,GC每10秒运行一次 以下是表演的快照: Jprofiler运行14小时 JvisualVM在最后一小时内跑步 JvisualVM-高CPU使用

我检查了Java应用程序的当前内存行为,我注意到垃圾收集器最初很少运行,但在很长一段时间内,它会继续更频繁地运行,即使我没有设置最大内存使用量限制(服务器有8Gb的可用ram)

最初GC每20分钟运行一次,15小时后每分钟运行一次,但应用程序执行相同的操作,RAM使用没有峰值

继续运行GC,它会消耗越来越多的CPU,24小时后,CPU使用率为85%,GC每10秒运行一次

以下是表演的快照:

Jprofiler运行14小时

JvisualVM在最后一小时内跑步

JvisualVM-高CPU使用率

为什么即使内存很低,GC也会启动?在这种情况下不应该开始


原因可能是什么,或者我应该做些什么来调查这种行为?

在问题中包括您的GC设置。如果CPU使用率为85%,但您每10秒只获得一次GC,您的程序似乎已经疯了,可能正在生成大量垃圾,这些垃圾在年轻一代中被收集。可能在您的代码/您使用的东西中有
System.gc()
调用,请尝试添加
-XX:+DisableExplicitGC
。根据您发布的图表,gc活动约为0%。那么,是什么让你认为是GC部分在消耗CPU时间呢?你们应该发布GC日志而不是图表。我用坏情况图表更新了问题。CPU使用率高,GC经常运行。