Sat*_*ish 5 java performance jvm tomcat6
我们在高峰时间有严重的应用问题,应用程序变得非常慢,当我检查AppDynamics矩阵时,我的堆内存已满,GC每分钟都会启动,这使得它非常慢.这是我的java(tomcat)的配置
OS version is Redhat 5 Linux
java version "1.6.0_05" 64Bit
Run Code Online (Sandbox Code Playgroud)
Java选项是 -Djava.awt.headless=true -Xmx2048m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC
主要GC收集时间每分钟(ms)

CMS Old Gen用法,以MB为单位

标准伊甸园空间以MB为单位

任何建议为什么标准的伊甸园空间和老一代击中强硬线?
这是Heap使用和主要GC集合的最后12小时图片(绿点),GC之间非常高3:00AM to 7:00AM但是当我重新启动应用程序时,7:30AM一切都很好,应用程序响应时间非常快,为什么重新启动修复了一切?

4GB后主要GC收集时间每分钟(ms)(Zero Major GC)

4GB堆后的MB旧版使用MB

4GB堆后的MB Eden空间

每分钟一次Major GC 看起来一点也不麻烦。通常需要大约半秒,因此这是总体 CPU 使用率的 1/120。繁重的应用程序负载会导致更多的内存分配,这也是很自然的。显然,您正在分配一些存在一段时间的对象(可能是缓存)。
我的结论是:所展示的 GC 行为并不能证明您的应用程序的内存分配存在问题。
我更仔细地看了你的图表(不幸的是它们很难阅读)。您没有每分钟 1 次 GC;每分钟有 60秒的主要 GC,这意味着它一直在发生。这看起来确实是个大麻烦;事实上,在这些情况下,您通常会因为“超过 GC 时间百分比阈值”而得到 OOME。请注意,您使用的 CMS 收集器实际上比默认收集器慢;它的优点只是它不会“阻止世界”那么多。这可能不是您的最佳选择。但您确实会查找内存泄漏或程序设计中的一般问题。